簡體   English   中英

當svn diff + patch起作用時,為什么在這種情況下svn merge --ignore-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文檔中都找不到解釋。 這是我的情況:

  1. 新資料庫(rev.0)
  2. 在主干中創建了一個名為file的空白文件(版本1)
  3. 復制到分支機構/分支機構的主干1(修訂版2)
  4. 在branchs / branch1中,將file更改為“ abcdefg”並提交(修訂版3)
  5. 回到后備箱,跑:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM