[英]SVN Merge - Merging back to trunk when branch doesn't share common ancestry
[英]Why doesn't svn merge --ignore-ancestry work twice in this scenario, when svn diff+patch does?
我正在嘗試用實際的svn merge
替換我的svn合並工作流程-通常是svn diff
,有時是手動編輯補丁,然后進行patch
。 但是我看到了一些意外的行為,並且在任何在線SVN文檔中都找不到解釋。 這是我的情況:
file
的空白文件(版本1) file
更改為“ abcdefg”並提交(修訂版3) svn merge -c3 ^/branches/branch1 . --ignore-ancestry
到現在為止還挺好。 中繼中的file
包含“ abcdefg”。 自從我使用--ignore-ancestry以來,trunk並未使用任何mergeinfo更新。 為了驗證,我運行:
svn pg svn:mergeinfo .
什么都不打印。 大。 所以現在我想再次申請在R3的變化。 所以我跑:
svn merge -c3 ^/branches/branch1 . --ignore-ancestry
該命令不執行任何操作 。 不輸出任何輸出,不更改file
,也不添加任何mergeinfo。 如果我對舊的差異和修補工作流執行相同的操作,則如下所示:
svn diff -c3 ^/branches/branch1 | patch
然后,再次使用更改更新文件。 由於更改總計為:
--- file (revision 2)
+++ file (revision 3)
@@ -0,0 +1 @@
+abcdefg
再次應用它只會使file
按預期包含兩行“ abcdefg”。
~~~
我知道這不應該是常見的工作流程,但是我覺得我需要先了解svn merge
在這種情況下的實際作用,然后才能輕松采用它。 (無需擁護svn merge
的好處-我已經加入了。)
謝謝!
合並通過比較兩個文件來合並並迫使您協調差異來工作(使用祖先關系時,文件關聯當然要容易很多倍)。 如果文件相同,則不會發生任何事情。 看來Subversion認為后繼者贏得了“舊文件”和“后繼文件”之間的沖突。 在任何不連續的真實內容上,您都會遇到使用合並工具修復的沖突。 --ignore-ancestry
確實可以忽略svn:mergeinfo屬性,同時在幫助不大的情況下保留基於隱式路徑的歷史記錄信息,因此該文檔在此點上並不明確。
另一方面,補丁程序的工作流程很流暢,這就是為什么它會使文本內容加倍的原因:在沒有上下文的情況下(盡管希望統一補丁格式中的上下文,但在您的情況下實際上沒有任何內容), 修補程序認為這是一個很好的選擇想法是再次應用補丁,盡管在這種情況下正確的方法通常是SubVersion。 另一個修補程序工具可能已經注意到上下文的缺失,並認為這是強制實施“文件開始” /“文件結束”上下文的必要,然后補丁將失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.