SVN - แก้ไขความขัดแย้ง

ทอมตัดสินใจเพิ่มไฟล์ README สำหรับโครงการของพวกเขา ดังนั้นเขาจึงสร้างไฟล์ READMEและเพิ่มรายการสิ่งที่ต้องทำลงไป หลังจากเพิ่มสิ่งนี้ที่เก็บไฟล์จะอยู่ที่การแก้ไข 6

[tom@CentOS trunk]$ cat README 
/* TODO: Add contents in README file */

[tom@CentOS trunk]$ svn status
?       README

[tom@CentOS trunk]$ svn add README 
A         README

[tom@CentOS trunk]$ svn commit -m "Added README file. Will update it's content in future."
Adding         trunk/README
Transmitting file data .
Committed revision 6.

เจอร์รี่ตรวจสอบรหัสล่าสุดซึ่งอยู่ในการแก้ไข 6 และทันทีที่เขาเริ่มทำงาน หลังจากนั้นไม่กี่ชั่วโมงTom ก็อัปเดตไฟล์ README และยอมรับการเปลี่ยนแปลงของเขา README ที่แก้ไขจะมีลักษณะดังนี้

[tom@CentOS trunk]$ cat README 
* Supported operations:

1) Accept input
2) Display array elements

[tom@CentOS trunk]$ svn status
M       README

[tom@CentOS trunk]$ svn commit -m "Added supported operation in README"
Sending        trunk/README
Transmitting file data .
Committed revision 7.

ตอนนี้ที่เก็บอยู่ที่การแก้ไข 7 และสำเนาการทำงานของ Jerryล้าสมัย เจอร์รี่ยังอัปเดตไฟล์ README และพยายามยืนยันการเปลี่ยนแปลงของเขา

ไฟล์ README ของ Jerryมีลักษณะดังนี้

[jerry@CentOS trunk]$ cat README 
* File list

1) array.c	Implementation of array operation.
2) README	Instructions for user.

[jerry@CentOS trunk]$ svn status
M       README

[jerry@CentOS trunk]$ svn commit -m "Updated README"
Sending        trunk/README
svn: Commit failed (details follow):
svn: File or directory 'README' is out of date; try updating
svn: resource out of date; try updating

ขั้นตอนที่ 1: ดูความขัดแย้ง

การโค่นล้มตรวจพบว่าไฟล์ README มีการเปลี่ยนแปลงตั้งแต่อัปเดตครั้งล่าสุด ดังนั้นJerryมีการอัปเดตสำเนาการทำงานของเขา

[jerry@CentOS trunk]$ svn up
Conflict discovered in 'README'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:

การโค่นล้มบ่นว่ามีความขัดแย้งกับไฟล์ README และการโค่นล้มไม่ทราบวิธีแก้ปัญหานี้ ดังนั้นเจอร์รี่จึงเลือกตัวเลือกdfเพื่อตรวจสอบความขัดแย้ง

[jerry@CentOS trunk]$ svn up
Conflict discovered in 'README'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: df
--- .svn/text-base/README.svn-base	Sat Aug 24 18:07:13 2013
+++ .svn/tmp/README.tmp	Sat Aug 24 18:13:03 2013
@@ -1 +1,11 @@
-/* TODO: Add contents in README file */
+<<<<<<< .mine
+* File list
+
+1) array.c	Implementation of array operation.
+2) README	Instructions for user.
+=======
+* Supported operations:
+
+1) Accept input
+2) Display array elements
+>>>>>>> .r7
Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options:

ขั้นตอนที่ 2: เลื่อนความขัดแย้ง

Next Jerryเลือกตัวเลือกการเลื่อน (p)เพื่อให้เขาสามารถแก้ไขความขัดแย้งได้

Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: p
C    README
Updated to revision 7.
Summary of conflicts:
  Text conflicts: 1

หลังจากเปิด README ในโปรแกรมแก้ไขข้อความเขาตระหนักว่าการโค่นล้มได้รวมทั้งรหัสของทอมและรหัสของเขาด้วยเครื่องหมายความขัดแย้ง

[jerry@CentOS trunk]$ cat README
<<<<<<< .min
* File list

1) array.c	Implementation of array operation.
2) README	Instructions for user.
=======
* Supported operations:

1) Accept input
2) Display array elements
>>>>>>> .r7

เจอร์รี่ต้องการการเปลี่ยนแปลงของทอมเช่นเดียวกับเขาดังนั้นเขาจึงลบบรรทัดที่มีเครื่องหมายความขัดแย้งออก

ดังนั้น README ที่แก้ไขจะมีลักษณะเช่นนี้

[jerry@CentOS trunk]$ cat README
* File list

1) array.c	Implementation of array operation.
2) README	Instructions for user.

* Supported operations:

1) Accept input
2) Display array elements

เจอร์รี่แก้ไขความขัดแย้งและเขาก็พยายามทำอีกครั้ง

[jerry@CentOS trunk]$ svn commit -m "Updated README"
svn: Commit failed (details follow):
svn: Aborting commit: '/home/jerry/project_repo/trunk/README' remains in conflict
 
[jerry@CentOS trunk]$ svn status
?       README.r6
?       README.r7
?       README.mine
C       README

ขั้นตอนที่ 3: แก้ไขความขัดแย้ง

ในการกระทำข้างต้นจดหมาย Cบ่งชี้ว่ามีข้อขัดแย้งในไฟล์ README เจอร์รี่แก้ไขความขัดแย้ง แต่ไม่ได้บอก Subversion ว่าเขาได้แก้ไขความขัดแย้งแล้ว เขาใช้คำสั่งแก้ไขเพื่อแจ้งการโค่นล้มเกี่ยวกับการแก้ไขความขัดแย้ง

[jerry@CentOS trunk]$ svn resolve --accept=working README
Resolved conflicted state of 'README'

[jerry@CentOS trunk]$ svn status
M       README

[jerry@CentOS trunk]$ svn commit -m "Updated README"
Sending        trunk/README
Transmitting file data .
Committed revision 8.