【问题标题】:Is it possible to Merge trunk and branch without pulling the source using Tortoise SVN?是否可以在不使用 Tortoise SVN 拉取源的情况下合并主干和分支?
【发布时间】:2025-12-03 10:10:02
【问题描述】:

我最近在分支中有一些包含一些特性的源代码。我想将它们合并到主干源。

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

所以,我只想通过单独提供源和目标位置来合并源,而不是在本地拉取源。或者是否有任何自动化方式可用?

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

【问题讨论】:

    标签: svn merge tortoisesvn


    【解决方案1】:

    我认为这是不可能的,但这是一件好事。你真的想要对所有这些源进行无意识的自动合并(以提交完成)吗?合并到本地副本中的目的是,您可以全面检查所有内容,并解决如果您在多个分支中的同一位置进行更改时会遇到的所有冲突....

    【讨论】:

    • 我希望它更像是一个绝对的替代品。但是,如果我删除旧源并使用 Copy To 选项。然后,我会丢失旧的修订细节。我想要旧源的修订详细信息以跟踪修订。我对svn不熟悉。或者是否可以保留旧的修订细节并删除旧的源并移动新的源?
    • 嘿,不知道我帮了多少忙,但我很高兴你最终解决了问题,戴夫。
    【解决方案2】:

    正如thistortoise svn 文章中指出的那样

    ... merging always takes place within a working copy.
    

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

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

    【讨论】:

      【解决方案3】:

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

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

      如果您必须合并 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 将失败)。

      【讨论】:

        最近更新 更多