2010-01-14 41 views
17

我對Subversion非常陌生,但我已經使用了其他版本控制系統(如ClearCase)多年。Subversion在移動後無法合併

我的老闆讓我修復這個項目,以便它可以用Maven而不是Ant來構建。我必須做的一件重要的事情是將src/com移動到src/main/java/com,並將test/com移動到src/test/java/com,我使用的命令是svn mv。我愚蠢地認爲,因爲我使用Subversion命令來移動目錄,Subversion會知道事情已經移動。當我將我的分支合併到主幹時,它似乎工作。但是現在有人剛剛完成了在他工作之前分支的一個分支上的工作。所以我們去合併他的東西到樹幹中,基本上Subversion似乎認爲「好吧,他對src/com/foo/bar/baz.java進行了更改,但該目錄不再存在,所以它是不相關的,所以放棄它」而不是我所期望的,這是「好的,他對src/com/foo/bar/baz.java進行了更改,但src/com已被移動,所以我需要將其合併爲src/main/java/com/foo/bar/baz.java

有沒有辦法讓Subversion做修改管理,還是我會手動合併這傢伙的未來兩天的變化?

+1

我剛剛得到了這個「功能」以及。我試圖避免手動合併的噩夢。 – granadaCoder 2013-03-29 15:45:45

回答

12

直接回答你的問題:

有沒有一種方法,使顛覆做版本管理,還是我將是手動合併這傢伙的變化對未來兩天?

你應該能夠讓自己更容易一點。

有一兩件事可以做,以減輕一些痛苦的(假設佈局如下)

/branch/foo/src/com 
/branch/foo/test/com 
/trunk/src/main/java/com 
/trunk/src/test/java/com 

之前你感動的src/COM爲src /主/ JAVA/COM和測試/ COM爲src /測試/ JAVA/COM,你可以這樣做:

cd $TRUNK 
svn merge -r N:M http://server/branch/foo . 

你現在可以做的是:

cd $TRUNK 
svn merge -r N:M http://server/branch/foo/src/com src/main/java/com 
svn merge -r N:M http://server/branch/foo/test/com src/test/java/com 

希望這有助於爲您節省一些 時間。

+0

啊,我希望在手動合併所有內容之前看過這個。 – 2010-01-14 22:39:40

2

這聽起來像是一次性問題。我建議你可以使用svn diff > /to/some/file.patch(或普通差異)來保存他對文件的修改,然後將它應用到你移動的中繼上patch -p0 < /to/some/file.path

0

任何人試過這個軟件? xMerge

這是SmartSVN的插件,但看起來像它的伎倆。 如果有人使用它,我將不勝感激,如果送我審查。

0

我剛剛遇到同樣的問題,我用git解決了這個問題。我不想合併src/main,src/testresourcessvn merge -r N:M http://server/branch/foo/test/com src/test/java/com的多個模塊。

所以我用git svn clone file:///some/repo -T trunk -b branches -t tags。像這樣,我能夠保持git mastersvn trunk同步並將其與我的git分支合併。當我完成後,我合併了git分支git主文件並從那裏到svn中繼線