我正在寻找一种方法来指定在使用Subversion合并来自特定分支的修改时不应更改文件的子集。我发现有人问了同样的问题,but for git。
我所拥有的是Maven pom.xml文件,这些文件是在为分支中的每个版本创建和更新分支时设置的。当我将更改从分支合并到trunk时,我不希望合并这些文件中的更改(并且它们实际上总是会发生冲突,因为版本号也已在trunk上更新)。有没有办法告诉subversion只接受这些文件的base,效果与git question的答案提供的效果相同?
其他人问了一个similar question,但是把它放在一个问题是错误的问题(生成代码)的上下文中。
答案 0 :(得分:2)
您可以在文件上设置svn:mergeinfo
属性的脚本,以使其跳过合并对分支所做的更改。 (见http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html#svn.branchmerge.advanced.blockchanges)
当我合并maven项目时,我使用TortoiseSVN,并取消选择发布插件对pom所做的更改,因此它不会尝试合并版本更改。当然,我还希望将pom的其他更改合并,因为大多数更改都是依赖项更改,并且我希望trunk获取这些新的依赖项更新。
答案 1 :(得分:2)
我的项目中的解决方案:Subversion上没有此文件,即将其包含在svn中:ignore。
如果您仍想共享该文件,您可以在版本控制下获得pom-example.xml
的副本。对于像pom.xml
这样的中心文件,可能可以接受开发人员在重新签出后将文件复制到真实文件名。
答案 2 :(得分:1)
如果您知道这些文件总是存在冲突,那么您可以使用选项'--accept mine-full'运行svn merge,这样可以确保通过接受分支上的当前版本来解决所有冲突。< / p>
编辑:
除了知道这些特定文件的脚本以及合并后它还原这些文件的内容之外,我想不出任何好的方法。这依赖于每次合并时手动运行它。
另一种替代方法是根本不在源代码控制中使用这些文件,而是在构建过程中自动生成它们,并以另一种形式存储有关哪些版本号在每个分支上的信息,例如LDAP或Mysql,并在结帐或构建过程中生成它们。我们使用这种方法(尽管我们在这些更改中合并的情况略有不同,但是每次构建时文件内容都会被覆盖,因此您不必关心冲突)。