是否可以在不使用Tortoise SVN的情况下合并主干和分支?

时间:2010-10-27 08:38:30

标签: svn merge tortoisesvn

我在分支中包含一些功能的最新源代码。我想将它们合并到主干源。

1)我不能在本地拉动源。因为,我必须在不同的不同位置合并30多个来源 2)我无法删除主干源位置并使用Copy To选项移动分支源。

所以,我只是想通过单独提供Source和Target位置来合并源,而不需要在本地提取源。或者有任何自动化方式吗?

我在SO中看到很多与此相关的帖子。他们都没有解决我正在寻找的背景。

3 个答案:

答案 0 :(得分:2)

我不认为这是可能的,但这是件好事。你真的想要所有这些来源的无意识的自动合并(完成提交)?在本地副本中合并的重点是,您可以完全检查所有内容,并解决如果您在多个分支中的相同位置发生更改所会产生的所有冲突....

答案 1 :(得分:2)

正如this togoise svn文章

所指出的那样
... merging always takes place within a working copy.

您可以使用svn merge --accept theirs-full URL1 URL2 WCPATH来解决与给定网址版本的所有冲突。

使用svn delete删除的来源仍将是历史记录的一部分。

答案 2 :(得分:1)

不,你问的是不可能的。合并发生在您的工作副本中。有几个原因可以保持这种方式:

  • 可能会出现冲突,必须予以处理。
  • 用户通常在提交新代码之前构建和测试,并且在合并之后也应该这样做。
  • 如果合并失败或者你做了一些愚蠢的事情,那么在实际提交之前你没有弄乱任何东西。

如果必须合并30多个来源,那么最好选择使用命令行客户端自动化。我就是这样做的(在bash中,你必须把它翻译成.bat或者你喜欢的任何东西):

REPOS= \
    http://... \
    http://...

for f in REPO; do
    svn co REPO/target      
    svn merge REPO/source target
    svn commit -m "Merged target into source" target
    rm -r target
done

提示:

  • 使用svn help <command>查看如何调用每个svn命令。
  • 首先使用svn merge --dry-run而不使用svn commit,以确保您可以在没有任何冲突的情况下进行合并(svn commit将失败,除非您先解决冲突。)