Trang chủ > Khác > Học SVN > SVN - Sửa lỗi (Học SVN)

SVN - Sửa lỗi (Học SVN)

Giả sử Jerry tình cờ thực hiện sửa tệp array. c và anh ta đã biên dịch lỗi. Bây giờ anh ta muốn gỡ bỏ các thay đổi đó. Trong tình huống này, hoạt động revert có tác dụng hỗ trợ làm điều này. Hoạt động revert sẽ undo bất cứ một thay đổi nội bộ nào đến một file hoặc thư mục và có thể giải quyết bất cứ trạng thái tranh chấp nào.

 [jerry@CentOS trunk]$ svn status

Lệnh trên sẽ tạo ra kết quả như dưới đây:

M array. c

Bây giờ hãy cố gắng để tạo mảng này như dưới đây:

 [jerry@CentOS trunk]$ make array

Lệnh trên sẽ tạo ra kết quả như dưới đây:

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 hoạt động revert 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 code trên.

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

Sau khi hoàn thành hoạt động trả lại (revert), khu vực làm việc của anh ta đã được trả lại như trạng thái ban đầu. Hoạt động này có thể giúp bạn trả lại một thư mục đầy đủ cũng như một file đơn. Để trả lại một thư mục, cần sử dụng tùy chọn -R như sau:

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

Tới bây giờ, chúng ta đã có thể quan sát thấy cách để trả lại các thay đổi, mà đã được thực hiện với khu vực làm việc. Nhưng điều gì sẽ xảy ra khi bạn trả lại một phiên bản đã được commit. Công cụ VCS sẽ không cho phép bạn xóa lịch sử từ repository. Chúng ta chỉ có thể thực hiện thao tác gán lịch sử. Nó sẽ vẫn diễn ra ngay cả khi bạn xóa các file từ trong kho chứa. Để undo một phiên bản cũ, chúng ta cần phải trả lại những gì đã được thay đổi trong phiên bản cũ và sau đó commit lại một phiên bản mới. Điều này còn được gọi là sáp nhập trả lại (revert merge).

Bây giờ chúng ta giả sử trường hợp Jerry đã thêm một code cho hoạt động linear search. Sau khi thẩm tra anh ta sẽ commit các 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 thao tác Tom đang làm. Chính vì thế anh ta đã kiểm tra các thông báo log.

 [jerry@CentOS trunk]$ svn log

Lệnh trên sẽ tạo ra kết quả như dưới đây:

------------------------------------------------------------------------
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 log, Jerry đã nhận ra rằng anh ta đã thực hiện một lỗi vô cùng nghiêm trọng. Bởi vì, Tom đã thực hiện hoạt động binary search, mà là tốt hơn lệnh linear search; code của anh ta là không cần thiết, và bây giờ Jerry cần phải thao tác để trả lại (revert) các thay đổi tới phiên bản trước đó. Vì thế, điều đầu tiên anh ta cần làm là tìm kiếm phiên bản hiện tại của repository. Hiện tại, phiên bản của repository là 22 và chúng ta cần phải revert nó về phiên bản cũ, là phiên bản 21.