Sửa lỗi trong SVN
Giả sử Jerry tình cờ sửa tệp array.c và anh ta biên dịch lỗi. Bây giờ anh ta muốn dỡ bỏ các thay đổi. Trong tình huống này, hoạt động revert sẽ giúp làm điều này. Hoạt động revert sẽ undo bất cứ thay đổi nội bộ nào tới một file hoặc thư mục và giải quyết bất cứ trạng thái tranh chấp.
[jerry@CentOS trunk]$ svn status
Lệnh trên sẽ tạo ra kết quả sau:
M array.c
Bây giờ cố gắng để tạo mảng này như sau:
[jerry@CentOS trunk]$ make array
Lệnh trên sẽ tạo ra kết quả 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 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 thực hiện hoạt động trả lại (revert), khu vực làm việc của anh ta được trả lại trạng thái ban đầu. Hoạt động này có thể trả lại một file đơn cũng như một thư mục đầy đủ. Để trả lại một thư mục, sử dụng tùy chọn -R như dưới đây.
[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 đã 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ì xảy ra nếu bạn trả lại một phiên bản đã commit. Công cụ VCS không cho phép xóa lịch sử từ repository. Chúng ta chỉ có thể gán lịch sử. Nó sẽ xảy 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 phải trả lại những gì đã thay đổi trong phiên bản cũ và sau đó commit một phiên bản mới. Điều này được gọi là sáp nhập trả lại (revert merge).
Bây giờ chúng ta giả sử rằng Jerry thêm một code cho hoạt động linear search. Sau khi thẩm tra anh ta commit 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ì 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ả 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 quan sát các thông báo log, Jerry nhận ra rằng anh ta đã thực hiện một lỗi nghiêm trọng. Bởi vì Tom đã chạy hoạt động binary search, mà là tốt hơn lệnh linear search; code của anh ta là thừa, và bây giờ Jerry phải trả lại (revert) những thay đổi tới phiên bản trước. Vì thế, điều đầu tiên 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 phải revert nó về phiên bản trước, là phiên bản 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.
Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.
Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.
Các bài học SVN phổ biến khác tại VietJack:
- SVN - Tiến trình Checkout
- SVN - Thực hiện các thay đổi
- SVN - Review các thay đổi
- SVN - Tiến trình Update
- SVN - Sửa lỗi