SVN - Sửa lỗi

Giả sử Jerry vô tình sửa đổi tệp array.c và anh ta đang gặp lỗi biên dịch. Bây giờ anh ấy muốn vứt bỏ những thay đổi. Trong tình huống này, thao tác 'hoàn nguyên' sẽ hữu ích. Thao tác hoàn nguyên sẽ hoàn tác mọi thay đổi cục bộ đối với tệp hoặc thư mục và giải quyết mọi trạng thái xung đột.

[jerry@CentOS trunk]$ svn status

Lệnh trên sẽ cho kết quả như sau.

M       array.c

Hãy thử tạo mảng như sau:

[jerry@CentOS trunk]$ make array

Lệnh trên sẽ cho kết quả như sau.

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 thực hiện thao tác 'hoàn nguyên' trên tệp array.c .

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

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

Bây giờ biên dịch mã.

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

Sau khi hoạt động hoàn nguyên, bản sao làm việc của anh ta trở lại trạng thái ban đầu. Thao tác hoàn nguyên có thể hoàn nguyên một tệp cũng như một thư mục hoàn chỉnh. Để hoàn nguyên một thư mục, hãy sử dụng tùy chọn -R như hình dưới đây.

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

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

Cho đến bây giờ, chúng ta đã thấy cách hoàn nguyên các thay đổi đã được tạo thành bản sao đang hoạt động. Nhưng nếu bạn muốn hoàn nguyên bản sửa đổi đã cam kết thì sao! Công cụ Hệ thống Kiểm soát Phiên bản không cho phép xóa lịch sử khỏi kho lưu trữ. Chúng tôi chỉ có thể thêm lịch sử. Nó sẽ xảy ra ngay cả khi bạn xóa tệp khỏi kho lưu trữ. Để hoàn tác một bản sửa đổi cũ, chúng tôi phải đảo ngược bất kỳ thay đổi nào đã được thực hiện trong bản sửa đổi cũ và sau đó thực hiện một bản sửa đổi mới. Đây được gọi là hợp nhất ngược.

Giả sử Jerry thêm mã cho hoạt động tìm kiếm tuyến tính. Sau khi xác minh, anh ta cam kết những thay đổi của mình.

[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 tò mò về những gì Tom đang làm. Vì vậy, anh ta kiểm tra các thông báo nhật ký Subversion.

[jerry@CentOS trunk]$ svn log

Lệnh trên sẽ cho kết quả như sau.

------------------------------------------------------------------------
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

Sau khi xem các thông báo nhật ký, Jerry nhận ra rằng mình đã phạm một sai lầm nghiêm trọng. Bởi vì Tom đã triển khai hoạt động tìm kiếm nhị phân, tốt hơn so với tìm kiếm tuyến tính; mã của anh ấy là thừa, và bây giờ Jerry phải hoàn nguyên các thay đổi của mình về bản sửa đổi trước đó. Vì vậy, trước tiên hãy tìm bản sửa đổi hiện tại của kho lưu trữ. Hiện tại, kho lưu trữ đang ở bản sửa đổi 22 và chúng tôi phải hoàn nguyên nó về bản sửa đổi trước đó, tức là bản sửa đổi 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.