Subversion

Sử lý các tranh chấp (thay đổi của bạn và của người khác)

svn status -u có thể giúp bạn dự báo các tranh chấp và khi chạy svn update bạn sẽ cập nhật bản làm việc của mình lên phiên bản mới trên trên repo ngoại trừ các thành phần bị đánh dấu tranh chấp.

$ svn update
U INSTALL
G README
C bar.c
Updated to revision 46.

U (Updated) có nghĩa là tập tin này không có thay đổi này trong bản làm việc của bạn
G (merGed) có nghĩa là tập tin này có thay đổi từ repo, và cũng đã được bạn thay đổi, các thay đổi từ repo đã được thêm vào tập tin này thành công
C (Conflict) có nghĩa là tập tin này có thay đổi từ repo, và bạn cũng đã thay đổi tập tin này, các thay đổi này nằm chồng lên nhau nên Subversion không thể tự động gộp các thay đổi này. Tập tin này sẽ được Subversion thêm vào các đánh dấu tranh chấp để bạn có thể tìm và chỉnh sửa.

Với mỗi tập tin bị tranh chấp, Subversion sẽ tự tạo ra 3 tập tin:

  • filename.mine

Tập tin này là tập tin trong bản làm việc của bạn trước khi bạn thực hiện svn update. Tập tin này chỉ chứa các thay đổi của bạn, không chứa các đánh dấu tranh chấp. (Nếu Subversion cho rằng tập tin này hoàn toàn không thể gộp được các thay đổi, tập tin .mine sẽ không được tạo ra, vì trong trường hợp này, tập tin này sẽ giống với tập tin trong bản làm việc của bạn)

  • filename.rOLDREV

Tập tin này là phiên bản BASE (phiên bản của bản làm việc của bạn trước khi bạn thực hiện svn update), tập tin này không chứa các thay đổi của bạn.

  • filename.rNEWREV

Tập tin này là phiên bản HEAD (phiên bản mới nhất trong repo). Tập tin này chứa các thay đổi từ phiên bản BASE tới phiên bản HEAD, và không có các thay đổi của bạn.

$ svn update
C sandwich.txt
Updated to revision 2.
$ ls -1
sandwich.txt
sandwich.txt.mine
sandwich.txt.r1
sandwich.txt.r2

Trong tình huống tranh chấp, bạn phải giải quyết tranh chấp trước khi cập nhật bản làm việc của mình vào repo. Bạn phải thực hiện 1 trong 3 cách sau

  • Chỉnh sửa tập tin tranh chấp (trong ví dụ trên là sandwich.txt, chứ không phải 3 tập tin được tạo ra), bạn chỉnh sửa các đánh dấu tranh chấp.
  • Chép 1 trong 3 tập tin được tạo ra (.mine, .rOLDREV hoặc .rNEWREV) lên tập tin tranh chấp
  • Chạy lệnh svn revert tên_tập_tin để hủy bỏ các thay đổi bạn đã thực hiện

Sau khi thực hiện 1 trong 3 cách trên, bạn phải chạy lệnh svn resolved tên_tập_tin để Subversion biết là các tranh chấp đã được giải quyết, và Subversion sẽ xóa các tập tin tạm thời đi.

$ svn resolved sandwich.txt
Resolved conflicted state of 'sandwich.txt'

Ví dụ về chỉnh sửa tranh chấp thủ công:

$ cat sandwich.txt
Top piece of bread
Mayonnaise
Lettuce
Tomato
Provolone
<<<<<<< .mine
Salami
Mortadella
Prosciutto
=======
Sauerkraut
Grilled Chicken
>>>>>>> .r2
Creole Mustard
Bottom piece of bread

Phần bạn sửa đổi là

<<<<<<< .mine
Salami
Mortadella
Prosciutto
=======

Phần đã bị người khác sửa đổi là

=======
Sauerkraut
Grilled Chicken
>>>>>>> .r2

0 Comments

No comments yet.

Leave a Reply