【问题标题】:How do I tell subversion to always select my local version for conflicted merges on a specific file?如何告诉 subversion 始终为特定文件的冲突合并选择我的本地版本?
【发布时间】:2010-01-22 16:51:45
【问题描述】:

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

我拥有的是 Maven pom.xml 文件,这些文件是在为分支的每个版本创建和更新分支时设置的。当我从分支将更改合并回主干时,我不希望合并这些文件中的更改(实际上它们总是会发生冲突,因为主干上的版本号也已更新)。有没有办法告诉 subversion 只接受这些文件的基础,以达到与git question 的答案相同的效果?

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

【问题讨论】:

    标签: svn merge


    【解决方案1】:

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

    当我合并maven项目时,我使用TortoiseSVN,并取消选择发布插件对pom所做的更改,因此它不会尝试合并版本更改。当然,我也希望对 pom 的其他更改进行合并,因为这些更改大部分是依赖项更改,我希望 trunk 获取这些新的依赖项更新。

    【讨论】:

    • 我已经开始手动合并 maven 所做的提交,勾选“仅记录合并”按钮。这样,我以后就不必提防他们了。
    【解决方案2】:

    我的项目中的解决方案:Subversion 上没有这个文件,即将它包含在 svn:ignore 中。

    如果您仍想共享该文件,您可以在版本控制下拥有它的副本,例如 pom-example.xml。对于像pom.xml 这样的中心文件,要求开发人员在重新签出后将文件复制到真实文件名可能是可以接受的。

    【讨论】:

      【解决方案3】:

      如果您知道文件总是会发生冲突,那么您可以使用选项 '--accept mine-full' 运行 svn merge,这将确保通过接受分支上的当前版本来解决所有冲突。

      编辑:

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

      另一种替代方法是根本不将这些文件放在源代码控制中,而是在构建过程中自动生成它们,并以另一种形式(例如 LDAP 或 Mysql)存储有关每个分支上的版本号的信息,并将它们作为结帐或构建过程的一部分生成。我们使用这种方法(尽管我们在这些更改中合并略有不同,但文件内容在每次构建时都会被覆盖,因此您不必关心冲突)。

      【讨论】:

      • 这样做的问题是还有其他需要合并的更改——我希望有一种方法可以设置,然后不必担心。
      猜你喜欢
      • 2013-03-20
      • 1970-01-01
      • 2011-01-01
      • 2012-09-19
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2012-06-25
      相关资源
      最近更新 更多