合并结构更改时避免树冲突

时间:2015-03-23 14:16:50

标签: svn merge tree-conflict

我已经建立了一个分支,在网站上进行一些清理和结构更改。 trunk的内容只是网站文件,如下所示(简称为简称):

/trunk/css/
/trunk/images/
/trunk/js/
/trunk/index.html

分支后,我将内容向下移动了一个级别,并为非网站内容(主要是PSD文件)创建了另一个目录,我仍然需要保留和使用它。结构现在是:

/branches/cleanup/www/css/
/branches/cleanup/www/images/
/branches/cleanup/www/js/
/branches/cleanup/www/index.html
/branches/cleanup/support/psd/

如何在没有大量树冲突的情况下将其干净地合并回主干?我确信我之前已经这样做了。问题是,我不能为我的生活记住如何。

自分支创建以来,我进行了一些主干更改,因此我遇到了树冲突。

我很高兴接受一个不太理想的解决方案,所以我的备份计划是忘记合并,而是在主干上执行svn move/branches/old-trunk/之类的,然后svn move清理分支到/trunk/并从那里开始。

除了必须手动将主干更改应用到清理分支外,是否会有这样的令人讨厌的副作用?

2 个答案:

答案 0 :(得分:2)

如果trunk中的文件没有变化,则不会发生任何冲突。

如果您更改了trunk中的任何文件,这些文件也在分支内移动,则无法在Subversion中解决此问题而不会出现树冲突。

<强>更新

如果您移动分支以将其用作新trunk,则会破坏您可能拥有的任何其他分支的自动合并解析。除此之外,这一举动应该没有问题,因为trunk绝不是特别的&#34;或与svn有关的任何其他目录不同。

答案 1 :(得分:1)

如果您愿意丢弃自创建分支以来对trunk所做的更改,可以使用svn merge选项svn checkout TRUNK_URL WC_PATH svn merge --accept theirs-full BRANCH_URL WC_PATH 指定您始终要使用分支版本冲突的情况:

theirs-conflict

您还可以尝试使用theirs-full代替{{1}}来仅从分支中获取冲突的区域文件,而不是整个文件。在你的情况下,既然你把所有东西都搬到了一个单独的目录中,我认为不会有任何区别,但我会尝试两者并进行比较。

但是,最终,你可能会将这些更改改为主干。我会咬紧牙关,解决冲突,而不是把你的工作扔进垃圾桶。还有其他可能的解决方法可以使这个过程不那么痛苦,比如将你的分支中的东西移回到与trunk相同的目录结构中,进行合并,重新分支,只是改变目录结构,但是你会引入额外的并发症。

顺便说一下,这就是你经常合并的原因。在SVN 1.5中引入自动合并跟踪使得该过程比以前少了很多痛苦。