- 究竟汞柱副本做什麼和什麼特殊待遇做到這一點 事業的未來?
它添加新文件並將它們標記爲舊文件的副本。由於它們是副本,原始文件中所做的更改將被合併到副本中。時間流從左至右:如果它原來是爲我們的情況做「錯誤的事情(TM)」
(init) --- (edit a.txt) ---- (a.txt edit is copied to b.txt)
\ /
(hg copy a.txt b.txt)
- ,我怎麼 取消標記該文件作爲beeing另一個文件的副本?
此機制僅在您合併時觸發。如果b.txt
不存在於 共同祖先修訂版(上圖中的init)中,則Mercurial將 向後搜索以查看b.txt
是否從其他位置複製。
讓我們繼續以縮略形式上圖:
(i) -- (edit a) -- (a edit copied to b) -- (edit a) -- (merge)
\ / /
(copy a b) --/------- (edit b) ------------------/
的問題是最終的合併是如何完成的。共同的祖先點 現在是copy a b
節點,並且此處存在a
和b
。這意味着 不會有任何搜索副本!所以第二次編輯a
不會 被合併到b
。
要仔細檢查,我嘗試過了:
$ hg init
$ echo a > a
$ hg add a
$ hg commit -m init
$ hg copy a b
$ hg commit -m "copy a b"
這是副本,b
現在只包含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"
這是第一次合併和編輯,以a
已被複制到b
:
$ cat b
a
aa
我們現在在平行進行更改:
$ 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)
有沒有進行任何進一步的複製:
$ cat a
a
aa
aaa
$ cat b
a
aa
bbb
至於禁用此...你真的不能明確禁用複製 檢測。但正如我希望上面所說明的那樣,在第一次合併之後,它不會再「打擾」你 。
如果第一次合併是一個問題,那麼在 開始合併之前,可以使用hg resolve --tool internal:local
將文件重置爲其狀態。因此,與
$ hg resolve --tool internal:local b
我們可以帶來b
回到剛纔包含一個符合a
。
您還可以在[Mercurial:權威指南]中閱讀[複製文件](http://tortoisehg.bitbucket.org/hgbook/1.7/mercurial-in-daily-use.html#chap:daily.copy) ](http://tortoisehg.bitbucket.org/hgbook/1.7/)一書。 – Matus 2016-11-10 00:45:25