我目前正在使用SVN对我的软件项目进行版本控制。在一个正在进行的项目中,我有一个主干,用于客户端的常用功能,规范和分支,用于客户特定的。
有没有办法在每次执行此类操作时标记一些不应合并到分支的文件/文件夹?
答案 0 :(得分:2)
我没有立即看到解决方案,但是编写脚本很容易。我给你的不是漏洞测试。
首先,您将列出您想要排除的目录。叫做〜/ .svn-merge-exclude
#regexes to exclude
./helpfiles/
./deploy_scripts/
./models/customer_integration
然后,在将turnk合并到它们之后,您将编写另一个脚本以在分支中恢复这些目录。
#/usr/bin/bash
# I am assuming that you made the excludes based on the root directory
# so that relative paths will work
for dir in $(cat ~/.svn-merge-excludes) ; do
svn revert -R $dir
done
那应该有用。这里最重要的是revert中的'-R'选项在目录上递归递归。因此,您的工作流程看起来就像。
# cd path/to/branch
# svn merge -r123:245 svn://svnserver.com/svn/trunk
# revert_excludes_from_branch.sh
然后你会处理冲突然后提交。如果您正在使用Windows,那么批处理文件也可以工作,您只需要输出系列的恢复命令。
答案 1 :(得分:2)
有一个选项,您实际上合并意味着合并不会改变目标中的文件,但会在合并跟踪道具中标记它。这样,改变将永远不会出现在要合并的文件中!
该功能在命令行版本中称为仅记录。
--record-only选项与-r一起使用并完全按照您的想法执行:它将修订标记为已合并(或未合并,如果使用“ - ”修订号否定语法),而不实际更改任何内容mergeinfo。例如,当有人手动编辑文件以便有效地合并已经在其他地方创建的更改时,这将非常有用。而不是将原始更改移植到下一个同步合并中,从而在两个版本平凡不同的地方冒着文本冲突的风险,您可以将更改记录为已合并。 (有关详细信息,请参阅合并跟踪要求和Subversion中的阻止更改一书。)