2

我已经建立了一个分支来对网站进行一些清理和结构更改。主干的内容只是网站文件,如下所示(为简洁起见):

/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/并从那里去。

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

4

2 回答 2

3

如果 中的文件没有更改trunk,您将不会遇到任何冲突。

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

更新

如果您移动您的分支以将其用作 new trunk,它将破坏您可能拥有的任何其他分支的自动合并解决方案。除此之外,这个移动应该没有问题,因为trunk当涉及到 svn 时,它绝不是“特殊的”或与任何其他目录不同。

于 2015-03-24T09:19:38.573 回答
1

如果您愿意放弃自创建分支以来对主干所做的更改,您可以使用该--accept选项svn merge来指定您始终希望在发生冲突时使用分支版本:

svn checkout TRUNK_URL WC_PATH
svn merge --accept theirs-full BRANCH_URL WC_PATH

您也可以尝试theirs-conflict而不是theirs-full只从分支中获取文件的冲突区域,而不是整个文件。就您而言,由于您将所有内容都移到了单独的目录中,因此我认为不会有任何区别,但是我会尝试两者并进行比较。

不过,最终您可能出于某种原因对主干进行了这些更改。我只会硬着头皮解决冲突,而不是把你的工作扔进垃圾桶。还有其他可能的解决方法可以使该过程不那么痛苦,例如将分支中的内容移回与主干相同的目录结构中,进行合并,重新分支并仅更改目录结构,但是随后您将引入额外的并发症。

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

于 2015-03-25T14:46:21.723 回答