2009-08-20 25 views
1

我在Subversion版本庫的一個分支上做了大量的開發工作。在整個過程中,我通過手動跟蹤我放入的哪些內容來合併樹幹更改。我意外地閱讀了一本SVN 1.0書,明確告訴我SVN不跟蹤哪些更改已合併,因此我試圖指定哪些合併到我的分支中,使其與主幹和所有正在進行的開發保持同步。如何使用SVN將更改從repo文件夾合併到自身?

問題出在這裏:我在同步時錯過了很多更改。我將它同步到了幾天前我認爲的日期,然後將其重新放回到我標記並刪除當前主幹的主幹中,然後將我的分支複製到主幹中。然而,在主幹上進行的一些開發(實際上相當多)已經丟失了,因爲在將分支移入主幹之前我沒有應用這些更改,並且沒有合併--reintegrate(它會將我的更改應用於主幹)。自那時以來,開發已經在這個新主幹上完成了(一整套錯誤修正),所以我無法真正重做合併。

重要提示:我實際上使用SVN 1.5,它使用svn:mergeinfo屬性。這很好,因爲我確切地知道我錯過了哪些修訂,但是我無法讓SVN應用它們。我試圖在我的工作拷貝(主幹的結賬)這樣做:

svn merge http://example.org/svn/trunk 

無濟於事,這也:

svn merge --ignore-ancestry http://example.org/svn/trunk 

這似乎運用了太多的變化,我認爲這應用了有史以來所做的每一個變更集,而不僅僅是我更新分支時錯過的變更集。

請幫忙!

回答

1

我標記並刪除了當前 樹幹,然後複製我的支進 主幹

決不做。現在,URL http://example.org/svn/trunk根據您正在討論的修訂版本引用了不同的版本化對象:舊的主幹或新的主幹。雙方之間的區別,你可以使用peg revision這樣的:

svn merge http://example.org/svn/[email protected]

如果peg修訂版本X是從刪除主幹修訂版(例如,它刪除了樹幹減一的修訂),那麼這將合併來自舊中繼線的所有合格修訂。

你可以使用--dry-run選項來看看會發生什麼,而不用做任何事情。您可以使用-r-c指定要合併的特定修訂版本或範圍,如輸入svn help merge時所述。

1

您可以使用svn指定版本範圍爲merge。因此,您可以指定您錯過的每個修訂版,以獲取每次進行的更改。

例如。

svn merge -r 30:31 thhgttg.txt 

更新完所有修訂後,我將編輯mergeinfo屬性,使其包含整套修訂。

相關問題