2010-03-26 100 views
37

場景:合併後提交分支上的日誌會發生什麼情況?

  1. 程序員在版本5
  2. 程序員使他的作品在「my_foo」功能,將多個文件多次更改創建項目「富」叫「my_foo」的一個分支。
  3. 在每一個重大步驟結束,說增加了幾項新的功能類,程序員確實在適當的文件,因此將它們提交到分支
  4. 經過幾個星期的svn commit和後來的許多承諾(每次提交有提交日誌描述他做了什麼),程序員合併分支回主幹:
 

#Assume the following is being done from inside a working copy of the trunk: 
svn merge -r 5:15 file:///path/to/repo/branches/my_foo 
 

Hazzah!他將他所有的變化重新整合到了後備箱中!山上有許多歡樂和喝酒。

現在讓我們假設另一位程序員在一週後出現,並將其工作副本從修訂版本5更新到修訂版本15.「哇」,他們說。 「我想知道自修訂版5以來有什麼變化」。那麼程序員做他們的工作副本的svn status和他們得到的是這樣的:

 
------------------------------------------------------------------------ 
r15 | programmer1 | 2010-03-20 21:27:04 -0400 (Sat, 20 Mar 2010) | 1 line 

Merging Version 2.0 Changes into trunk 
------------------------------------------------------------------------ 
r5 | programmer2 | 2010-02-15 10:59:55 -0500 (Mon, 15 Feb 2010) | 1 line 

Added assets/images/tumblr_icon.png to trunk 

到底發生了其他程序員放在他所有的在他的分支提交的所有音符是什麼?那些在合併期間不會被拖延?我是瘋了還是忘了什麼?

回答

9

Answer is outdated,現在我們有svn log -g


不,你不是瘋了。不幸的是,這是如何運作的。

您可以做的最好的事情是在提交消息中包含分支url和修訂號,以便人工查找該分支的修訂日誌。 (當然數據仍然存在)。

但是,您不知道哪些更改已將其添加到主幹中,哪些沒有更改。

如果主幹上沒有或幾乎沒有變化,則可以選擇進行反向合併(從主幹合併到分支),然後用分支替換主幹。 這種推理也可以在單獨的子文件夾中完成(例如:從分支中替換XML解析器實現子文件夾,保留其餘部分)。 替換文件夾(使用svn delete,svn copy)將保留修訂歷史記錄。

對於在合併期間新添加的文件,如果您使用svn copy命令,則可以從分支複製其修訂歷史記錄。不過,不知道合併命令是否包含對此的支持。

知道是否有一個工具可以執行「rebase」(如在git或mercurial中),這可能很有趣。這將爲分支上的每個更改創建單獨的提交。另一方面,也許個人承諾太混亂了。

我可以給出的最佳建議是使用一個良好的用戶界面(如Trac),以便檢查修訂歷史記錄,以便查看分支上發生的情況。

+0

非常好的信息,謝謝。 後續問題:一旦一個分支被合併到中繼,它不應該被刪除,因爲它不再需要?還是應該永久保存?如果我刪除了一個分支,是否所有提交/修訂數據都與它一起使用? –

+1

我想說盡快刪除分支(即當所有東西都已合併或過時),以避免混亂/混亂。如果需要,您可以稍後恢復分支(通過創建新分支作爲舊版本的副本)。 Subversion中沒有任何東西被刪除。 – Thilo

+0

所以如果有人想看到一個被刪除的分支的提交,他們必須檢查分支,然後做一個svn日誌?或者他們可以直接用svn log做些什麼? –

41

嘗試svn log -g包含自Subversion 1.5以來存儲的合併歷史記錄。

+7

+1這是我們google'rs需要的答案。 –

+0

+1絕對如此。但是,應該注意的是,如果合併替換了文件,那麼中間的修改將不會出現在日誌中。 (要標識替換的文件,您將在合併版本的svn log --verbose中將其視爲「R」)。試圖理解爲什麼修正*在中間*丟失了,讓我瘋狂。 – scraimer

13

TortoiseSVN在「顯示日誌」對話框底部的「包含合併修訂」複選框包含提交給分支的註釋。

+0

有沒有什麼特別要做的提交與SVN合併後備箱? – Cirelli94

2

好答案...如果您還想知道簽入文件和可能的分支名稱,請將-v [--verbose]選項與-g [--use-merge-history]綁定。

例如:

svn log -vg 

的輸出將具有在文件中的檢查(甚至在合併分支),的完整路徑,以及一個(從「revision_url」)消息在修改添加的文件用合併。

相關問題