2010-09-29 48 views
14

這是一個討厭的Subversion bug還是我以錯誤的方式接近它?Subversion:合併,還原,再次合併。爲什麼它默默地失敗?

將分支合併到主幹中。 - > HelloWorld.txt更新

還原HelloWorld.txt

做同樣的合併。 - >沒有文件更新。

爲什麼第二次不會再次更新HelloWorld?它的行爲就好像這個變化已經被複制了一樣。不應該恢復重置嗎?

如果您恢復整個文件夾HelloWorld所在,則第二次合併會再次正確應用更改。只有當你恢復一個失敗的文件。

這有點嚇人。如果我現在需要恢復一些文件,該怎麼辦?任何未來的合併都將默默無法複製關鍵代碼。

顛覆1.6 OS X 10.6.4

+0

感謝所有回覆! – Stephen 2011-02-25 12:09:20

+0

我正要問同樣的問題。請注意,如果你留在主幹上,也會發生這種情況,在r42中編輯,在r43中回滾,並且想要重新申請r42。你需要忽略祖先,否則什麼都不做。 – rds 2011-11-09 11:33:28

回答

6

顛覆合併執行跟蹤,這意味着它會記錄已經合併了什麼修改。合併信息記錄在合併根目錄(即,在svn merge之後作爲目標輸入的任何內容)上名爲svn:mergeinfo的屬性中。您還原了該文件,但可能沒有還原包含修改或添加的svn:mergeinfo屬性的合併根目錄。

3

桑德斯是對的。

不要認爲你好像在複製狀態。您「採取」更改並將其應用於不同的目標(理想情況下是相對於合併源)。

在svn 1.5之前,我們必須在合併時手動跟蹤這些更改。 「嗯,我才從這個分支合併r28445到r28501我不想重新申請,我做到了媒體鏈接的變化: - /」

這是一個令人頭痛的機器;),因爲1.5

svn的跟蹤你在過去做過,只會將相同的歷史更改一次應用到一個獨特的目的地。

你應該可以在你的svn merge命令中使用「--ignore-ancestry」來禁用這個友好的檢查。準備好在你申請的所有準備中獲得很多變化。通過陳述修訂來縮小你想得到的結果。

svn merge --ignore-ancestry -c REVISION_WITH_CHANGE http://mysvn/path/to/mergeorigin 
19

此行爲舉止在SVN文檔Advanced Merging節中(見注23)。當您第一次合併您的更改時,將合併版本號在svn:mergeinfo屬性中進行跟蹤。如果撤銷更改,修訂仍會標記爲合併,以防止您錯誤地再次合併它。事實是,如果你刪除它,幾乎沒有機會你想要它回來...

如果然而你真的想再次合併它,那麼你可以使用--ignore-ancestry選項,將不檢查svn:mergeinfo如果修訂版本之前已合併過。另一個解決方案是故意從svn:mergeinfo中刪除此修訂版,以便將來可以再次合併。但不要手動完成,請使用svn merge命令的--record-only選項。

+0

發生在這一點上,我很高興瞭解「忽略祖先」的含義。我希望他們會把它稱爲「忽略mergeinfo」! – 2013-08-23 08:39:07

+0

我會給你一瓶啤酒! – juanmf 2014-09-28 23:03:14