【问题标题】:"Overwrite merge" using svn - is it even possible?使用svn“覆盖合并” - 甚至可能吗?
【发布时间】:2012-04-19 13:33:28
【问题描述】:

使用 Subversion 我有两个不同的主干,它们包含基本相同的内容,但其中一个的更新频率低于另一个。为简单起见,我们称它们为“旧主干”和“新主干”。

我想定期将“旧中继”中存在的所有内容替换为“新中继”中的内容。本质上,我想要的是“复制”所有内容并替换现有内容。

如果我尝试合并,我最终会在“新主干”中删除一些文件,作为两个主干之间的实用合并。这不是我想要的。

以前我习惯于手动复制和替换每个子文件夹,首先是删除旧版本中不需要的文件。这是一个艰苦的过程,应该用 Clearcase 中的“覆盖合并”来代替。

有没有办法在不手动遍历每个文件夹的情况下完成此操作?

编辑:这不是一个理想的设置,但由于我无法控制的情况,它就是这样。我仍然想知道我的核心问题的答案:是否可以创建覆盖合并?

【问题讨论】:

  • 如果您在其中执行的任何操作都会定期被覆盖,那么拥有旧主干有什么意义?难道你不能简单地删除旧的主干并通过复制新的来重新创建它吗?
  • 我可能可以,但我既不熟悉也不允许访问 SVN 和我们的构建设置/部署之间的配置。

标签: svn merge


【解决方案1】:

SVN 是一个集中的版本控制系统。你不应该有两个树干,这不是它的用途。您应该使用分支和标签。您的旧树干将是一个分支,然后您将树干合并到其中。如果您想要多个存储库并在它们之间进行同步,您应该使用像 git 这样的分布式版本控制系统。

【讨论】:

  • 这不是我的设置,我只是使用现有的。当前设置有(或者更准确地说,是)一个目的。最初的目的不是拥有两个相同的树干,但出于实际原因,它变成了这样。
  • 尽管你提出了一个有效的观点。树干和树枝之间的(功能)区别是什么?
  • svn中主干和分支的区别是概念上的stackoverflow.com/questions/16142/…。我想你的意思是你有两个存储库?如果你只有一个仓库,那么你可以使用 svn 合并功能。
【解决方案2】:

答案是否定的,Subversion (1.6) 不提供任何覆盖合并功能。我还假设您无法更改配置管理程序。如果可以,那么您应该按照推荐的做法使用 Subversion。发布分支是一件好事(TM)。

但是,我有两个疯狂的想法给你:

  1. 如果您不需要保留目标中继的更改或合并历史记录,只需将其删除并将源中继复制到其位置即可。这就像有一个发布分支,但你一直在重新创建它。我认为这没有什么价值。

  2. 您可以尝试仅滥用记录并重新集成功能。首先,您将首先将目标干线记录(而不是实际合并)回源干线。这将使 Subversion 认为您已成功合并分支并且它是最新的。之后,您会定期告诉 Subversion 将源主干重新集成到目标主干中。由于重新整合只查看每个分支的尖端,这可能会起作用。如果您尝试,请告诉我们结果!

关于第二个想法,请参考 Subversion 书中的 Advanced Merging 部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 2018-10-11
    相关资源
    最近更新 更多