- Chính xác những gì hg bản sao làm và những gì đối xử đặc biệt không gây này trong tương lai?
Nó thêm tệp mới và đánh dấu chúng là bản sao của tệp cũ. Vì chúng là bản sao, một thay đổi được thực hiện trong tệp gốc sẽ được hợp nhất thành bản sao. Thời gian dòng chảy từ trái sang phải:
(init) --- (edit a.txt) ---- (a.txt edit is copied to b.txt)
\ /
(hg copy a.txt b.txt)
- Nếu nó quay ra để làm 'điều sai (tm) đối với trường hợp của chúng tôi, làm thế nào tôi unflag nội dung tập tin beeing một bản sao của tập tin khác ?
Cơ chế này chỉ khởi động khi bạn hợp nhất. Nếu b.txt
không có trong số sửa đổi tổ tiên chung (init trong biểu đồ trên), thì Mercurial sẽ thực hiện tìm kiếm ngược lại để xem nếu b.txt
được sao chép từ một nơi khác.
Chúng ta hãy tiếp tục biểu đồ trên ở dạng viết tắt:
(i) -- (edit a) -- (a edit copied to b) -- (edit a) -- (merge)
\ / /
(copy a b) --/------- (edit b) ------------------/
Câu hỏi đặt ra là làm sao hợp nhất chính thức được thực hiện. Điểm tổ tiên chung hiện là nút copy a b
và tại đây cả hai a
và b
đều có mặt. Điều này có nghĩa là rằng sẽ không có bất kỳ tìm kiếm nào cho các bản sao! Vì vậy, chỉnh sửa thứ hai để a
wont được hợp nhất thành b
.
Để kiểm tra lại, tôi đã thử nó ra:
$ hg init
$ echo a > a
$ hg add a
$ hg commit -m init
$ hg copy a b
$ hg commit -m "copy a b"
Đây là bản sao, b
bây giờ chứa chỉ a
.
$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo aa >> a
$ hg commit -m "edit a"
created a new head
$ hg merge
merging a and b to b
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m "a edit copied to b"
Đây là hợp nhất đầu tiên và chỉnh sửa để a
đã được sao chép vào b
:
$ cat b
a
aa
Bây giờ chúng ta thực hiện thay đổi song song:
$ echo aaa >> a
$ hg commit -m "edit a again"
$ hg update 3
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo bbb >> b
$ hg commit -m "edit b"
created new head
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Không có sao chép thêm làm :
$ cat a
a
aa
aaa
$ cat b
a
aa
bbb
Để tắt tính năng này ... bạn không thể thực sự vô hiệu hóa việc phát hiện bản sao . Nhưng như tôi hy vọng đã minh họa ở trên, nó sẽ không "làm phiền" bạn một lần nữa sau lần hợp nhất đầu tiên.
Nếu hợp nhất đầu tiên là sự cố, bạn có thể sử dụng hg resolve --tool internal:local
để đặt lại tệp về trạng thái trước khi bạn bắt đầu hợp nhất. Vì vậy, với
$ hg resolve --tool internal:local b
chúng ta có thể đã mang lại b
trở lại chỉ chứa một dòng với a
.
Bạn cũng có thể đọc [Sao chép tệp] (http://tortoisehg.bitbucket.org/hgbook/1.7/mercurial-in-daily-use.html#chap:daily.copy) trong [Mercurial: The Definitive Guide ] (http://tortoisehg.bitbucket.org/hgbook/1.7/) cuốn sách. – Matus