代码之家  ›  专栏  ›  技术社区  ›  Andrew Aylett

如何告诉Subversion始终为特定文件上的冲突合并选择本地版本?

  •  5
  • Andrew Aylett  · 技术社区  · 15 年前

    我正在寻找一种方法来指定,当使用Subversion合并来自特定分支的修改时,不应更改文件的子集。我发现有人问同样的问题, but for git .

    我拥有的是maven pom.xml文件,这些文件是在为分支的每个版本创建和更新分支时设置的。当我从分支将更改合并回主干时,我不希望合并这些文件中的更改(它们实际上总是冲突的,因为主干上的版本号也已更新)。是否有任何方法可以告诉Subversion只接受这些文件的基础,其效果与对 git question ?

    有人问过 similar question 但是将它放在一个问题是错误的上下文中(生成的代码)。

    3 回复  |  直到 12 年前
        1
  •  2
  •   Larry Shatzer    12 年前

    您可以通过脚本设置 svn:mergeinfo 属性,以便跳过对分支所做的更改。(参见 http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html#svn.branchmerge.advanced.blockchanges )

    当我合并maven项目时,我使用tortoissesvn,取消选择由发布插件对pom所做的更改,这样它就不会尝试在版本更改中合并。当然,我也希望合并对POM的其他更改,因为大多数更改都是依赖性更改,我希望trunk获得这些新的依赖性更新。

        2
  •  2
  •   Wolfgang    15 年前

    我的项目中的解决方案:不要在Subversion上使用此文件,即将其包含在svn:ignore中。

    如果你仍然想共享这个文件,你可以像 pom-example.xml 在版本控制下。对于中心文件 pom.xml 可能可以接受的是,在重新签出之后,开发人员需要将文件复制到真正的文件名。

        3
  •  1
  •   the_mandrill    15 年前

    如果您知道文件总是有冲突,那么可以运行带有选项“--accept mine full”的svn merge,该选项应确保通过接受分支上的当前版本来解决所有冲突。

    编辑:

    除了有一个了解这些特定文件的脚本,并在合并之后恢复这些文件的内容之外,我想不出任何好的方法。这依赖于每次合并时手动运行它。

    另一种替代方法是根本不在源代码管理中包含这些文件,而是在构建过程中自动生成它们,并以另一种形式(例如LDAP或MySQL)存储每个分支上的版本号信息,并在签出或构建过程中生成它们。我们使用这种方法(尽管我们在这些更改中合并了一些细微的差异,但是在每个构建中文件内容都会被覆盖,所以您不关心冲突)。