SVN - แก้ไขข้อผิดพลาด

สมมติว่าเจอร์รี่แก้ไขไฟล์array.cโดยไม่ได้ตั้งใจและเขาได้รับข้อผิดพลาดในการคอมไพล์ ตอนนี้เขาต้องการที่จะทิ้งการเปลี่ยนแปลง ในสถานการณ์เช่นนี้การดำเนินการ "ย้อนกลับ" จะช่วยได้ การดำเนินการย้อนกลับจะยกเลิกการเปลี่ยนแปลงภายในไฟล์หรือไดเร็กทอรีและแก้ไขสถานะที่ขัดแย้งกัน

[jerry@CentOS trunk]$ svn status

คำสั่งด้านบนจะให้ผลลัพธ์ดังต่อไปนี้

M       array.c

ลองสร้างอาร์เรย์ดังนี้:

[jerry@CentOS trunk]$ make array

คำสั่งด้านบนจะให้ผลลัพธ์ดังต่อไปนี้

cc     array.c   -o array
array.c: In function ‘main’:
array.c:26: error: ‘n’ undeclared (first use in this function)
array.c:26: error: (Each undeclared identifier is reported only once
array.c:26: error: for each function it appears in.)
array.c:34: error: ‘arr’ undeclared (first use in this function)
make: *** [array] Error 1

Jerryดำเนินการ 'ย้อนกลับ' ในไฟล์array.c

[jerry@CentOS trunk]$ svn revert array.c 
Reverted 'array.c'

[jerry@CentOS trunk]$ svn status
[jerry@CentOS trunk]$

ตอนนี้รวบรวมรหัส

[jerry@CentOS trunk]$ make array
cc     array.c   -o array

หลังจากดำเนินการเปลี่ยนกลับสำเนาการทำงานของเขาจะกลับสู่สถานะเดิม การดำเนินการย้อนกลับสามารถย้อนกลับไฟล์เดียวและไดเร็กทอรีที่สมบูรณ์ ในการเปลี่ยนไดเร็กทอรีให้ใช้ตัวเลือก -R ดังที่แสดงด้านล่าง

[jerry@CentOS project_repo]$ pwd
/home/jerry/project_repo

[jerry@CentOS project_repo]$ svn revert -R trunk

จนถึงตอนนี้เราได้เห็นวิธีการเปลี่ยนกลับซึ่งได้ทำกับสำเนาที่ใช้งานได้แล้ว แต่ถ้าคุณต้องการเปลี่ยนกลับการแก้ไขที่มุ่งมั่น! เครื่องมือระบบควบคุมเวอร์ชันไม่อนุญาตให้ลบประวัติจากที่เก็บ เราสามารถต่อท้ายประวัติศาสตร์เท่านั้น มันจะเกิดขึ้นแม้ว่าคุณจะลบไฟล์ออกจากที่เก็บก็ตาม ในการยกเลิกการแก้ไขเก่าเราต้องย้อนกลับการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นในการแก้ไขเดิมแล้วทำการแก้ไขใหม่ สิ่งนี้เรียกว่าการผสานย้อนกลับ

สมมติว่าเจอร์รี่เพิ่มรหัสสำหรับการดำเนินการค้นหาเชิงเส้น หลังจากตรวจสอบแล้วเขายอมรับการเปลี่ยนแปลงของเขา

[jerry@CentOS trunk]$ svn diff
Index: array.c
===================================================================
--- array.c   (revision 21)
+++ array.c   (working copy)
@@ -2,6 +2,16 @@
 
 #define MAX 16
 
+int linear_search(int *arr, int n, int key)
+{
+   int i;
+
+   for (i = 0; i < n; ++i)
+      if (arr[i] == key)
+         return i;
+   return -1;
+}
+
 void bubble_sort(int *arr, int n)
 {
    int i, j, temp, flag = 1;

[jerry@CentOS trunk]$ svn status
?       array
M       array.c

[jerry@CentOS trunk]$ svn commit -m "Added code for linear search"
Sending        trunk/array.c
Transmitting file data .
Committed revision 22.

เจอร์รี่อยากรู้ว่าทอมกำลังทำอะไร ดังนั้นเขาจึงตรวจสอบข้อความบันทึกการโค่นล้ม

[jerry@CentOS trunk]$ svn log

คำสั่งดังกล่าวจะให้ผลลัพธ์ดังต่อไปนี้

------------------------------------------------------------------------
r5 | tom   | 2013-08-24 17:15:28 +0530 (Sat, 24 Aug 2013) | 1 line

Add binary search operation
------------------------------------------------------------------------
r4 | jerry | 2013-08-18 20:43:25 +0530 (Sun, 18 Aug 2013) | 1 line

Add function to accept input and to display array contents

หลังจากดูข้อความบันทึกเจอร์รี่ก็ตระหนักว่าเขาทำผิดร้ายแรง เนื่องจาก Tom ได้ดำเนินการค้นหาแบบไบนารีซึ่งดีกว่าการค้นหาเชิงเส้น รหัสของเขาซ้ำซ้อนและตอนนี้เจอร์รี่ต้องเปลี่ยนกลับเป็นการแก้ไขก่อนหน้านี้ ดังนั้นก่อนอื่นให้ค้นหาการแก้ไขปัจจุบันของที่เก็บ ขณะนี้ที่เก็บอยู่ที่การแก้ไข 22 และเราต้องเปลี่ยนกลับเป็นการแก้ไขก่อนหน้าคือการแก้ไข 21

[jerry@CentOS trunk]$ svn up 
At revision 22.

[jerry@CentOS trunk]$ svn merge -r 22:21 array.c 
--- Reverse-merging r22 into 'array.c':
U    array.c

[jerry@CentOS trunk]$ svn commit -m "Reverted to revision 21"
Sending        trunk/array.c
Transmitting file data .
Committed revision 23.