2013-03-07 89 views
2

我的問題涉及到SVN合併機制的一些基礎知識。我在這裏不報告合併問題。此外,我已經通過SVN書的合併章(不是新手)。SVN合併基礎知識

我有10個修訂的主幹,我想合併修訂5,6,7,8,9和10到一個特定的標籤。

我可以通過運行合併操作6次成功合併成烏龜SVN。每次我只指定一個修訂(即5,6,7,8,9,10)。

如果我對SVN修訂版的理解是正確的,修訂版10(HEAD修訂版)具有以前版本的所有修復,即5,6,7和9.因此,我可以通過僅運行一次合併操作節省時間,即通過指定修訂版10.

對我的問題的明顯反應是我應該指定一個「修訂範圍」。

我的問題是爲什麼甚至指定一個範圍,當修訂版10將包含以前修訂的所有變化(http://svnbook.red-bean.com/en/1.7/svn-book.html#svn.basic.in-action)?我不能通過指定單個修訂(第10)來進行合併,並期望SVN能夠正確合併?

+0

不錯的問題! +1問題達到基本概念!!! – 2013-03-07 06:35:15

回答

0

實際上,svn merge命令將diff(或changeset)作爲參數。作爲

svn merge -c10 URL 

它實際上是一樣的:所以當你使用這樣的命令合併

svn merge -r9:10 URL 

,並通過合併10日帶來的變化提交到庫。

此外,svn:mergeinfo屬性將指示與版本10相對應的變更集已被合併,以便後續合併將變得更加智能,並且不會嘗試第二次合併該變更集。

因此,要專門回答您的問題,請在要合併對應於該特定範圍的更改時指定svn merge命令的一個修訂範圍。

有一個關於修改和變更在the documentation通知:

在Subversion,一個全球性的修訂數N名的 庫中的樹:它的倉庫看了N次提交後的方式。這也是隱式變更集的名稱:如果您將樹N 與樹N-1進行比較,則可以派生出提交的確切補丁。對於 這個原因,很容易將修訂版N視爲不僅僅是一棵樹,而且也是一個變更集。如果您使用問題跟蹤器來管理錯誤,那麼 可以使用修訂號碼來引用修復 錯誤的特定修補程序,例如,「此問題已由r9238修復」。然後,某人可以運行svn log -r 9238來運行svn log -r 9238閱讀修正 錯誤的確切變更集,然後運行svn diff -c 9238以查看修補程序本身。並且(你會很快看到 )Subversion的svn merge命令能夠使用修訂號 的數字。您可以通過在合併參數中命名它們,將特定變更集從一個分支合併到另一個分支: :傳遞-c 9238到svn合併 會將變更集r9238合併到您的工作副本中。

+0

對不起,我的回覆延遲。感謝您的回答。我現在明白,在合併時,必須將修訂視爲變更集。 – Ben 2013-03-11 22:32:56