2010-01-14 61 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中继线