SVN合并分支从一个回购到其他回购的主干

时间:2009-02-24 19:44:20

标签: svn tortoisesvn merge

我有两个存储库,它们位于不同的服务器上,称之为repo-1和repo-2。

开始两个“中继线”是相同的:

repo-1 / trunk == repo-2 / trunk

与此同时,更改被提交到repo-1 / trunk,我正在努力并对repo-2 / trunk进行更改。

现在我需要将repo-1 / trunk中的更改合并到repo-2 / trunk。

我以为我会将repo-1 / trunk复制到repo-2 / tags / r1_20090224,然后将该标签合并到我的本地工作副本repo-2 / trunk(即c:\ dev \ repo2-trunk)。 / p>

有关如何执行此操作的任何建议?我正在尝试使用TortoiseSVN并执行“合并两个不同的树”,我使用了以下设置:

来自:repo-2 / trunk 收件人:repo-2 / tags / r1_20090224 工作副本:c:\ dev \ repo2-trunk

我也试过交换“从”和“到”......但没有运气。通过尝试这两个合并选项中的任何一个,我最终得到以下结果:

  1. 如果我从主干到标签合并(进入我的本地副本repo-2 / trunk),我会丢失主干更改并更改标签。

  2. 如果我从标签合并到主干(进入我的本地副本repo-2 / trunk),我会丢失标签更改并保持主干更改。

  3. 有关这方面的任何建议吗?

4 个答案:

答案 0 :(得分:1)

首先找出树木相同的修订版。然后将该修订版本与repo-1存储库的HEAD合并到您的repo-2工作副本。

如果要在r123和r456之间合并更改,请使用命令行客户端与此类似,

svn merge http://domain.tld/repos1@123 http://domain.tld/repos1@456 repos2-workingcopy

答案 1 :(得分:1)

目前尚不完全清楚,但您需要从两棵树的 base 合并,即两个树干相同的点。

桑德打败了我,所以对他很有信心,但这里还有一些提示:

  1. 尽快将这两个存储库合并为一个存储库; Subversion实际上并没有像这样工作。或者转移到像git或bazaar这样的DVCS或......
  2. 如果你坚持使用Subversion,传统上这种东西是用分支完成的,而不是标签。标签通常用作标记点,并且不会被提交。

答案 2 :(得分:1)

如果 svn merge让您在两个网站/服务器上失败:

svn: Unusable URI: it does not refer to this repository

然后使用以下方法:

  1. 确定repo-2开始偏离repo-1的修订级别,比如123 ,然后:
  2. svn co http://server1/repo-1/trunk
  3. svn diff -r123:HEAD http://server2/repo-2/trunk >repo2.patches
  4. patch -p0 -i repo2.patches
  5. 筛选任何冲突并解决它们
  6. svn ci --message "merged from repo-2"

答案 3 :(得分:0)

如果您发现自己经常需要在一段时间内同时管理多个存储库,那么

SVK可能会有所帮助。