2010-03-04 37 views
4

我目前使用SVN来版本化我的软件项目。在一个正在进行的项目中,我为客户的常用功能和规格以及分支机构提供了客户端专用的主干。忽略合并时的文件/文件夹

有没有办法标记一些文件/文件夹,每次我执行这样的操作时都不应该合并到分支中?

+0

可能的[如何在Subversion合并期间忽略文件夹]的副本(http://stackoverflow.com/questions/1559552 /如何到忽略文件夹,在颠覆合并) – 2015-03-02 14:48:55

回答

2

有一个选项可以合并,这意味着合并不会更改目标中的文件,而是将其标记在合并跟踪道具中。这样,所做的更改永远不会在要合并的文件中出现。

该功能在命令行版本中被称为仅记录。

link text

的--record只选项与-r,准确地做什么你认为它的作用:它标志着一个修订的合并(或卸载了,如果使用的是“ - ”版本号否定语法),而不需要实际改变mergeinfo以外的任何东西。例如,当某人手动编辑文件以便有效合并已经在其他地方进行的更改时,这将非常有用。在下一次同步合并中,不必将原始更改移植到合适的位置,从而避免文本冲突,只要两个版本的细微差别不同,就可以将更改记录为已合并。 (有关更多详细信息,请参阅合并跟踪要求以及Subversion书中的阻止更改。)

2

我没有立即看到解决方案,但很容易编写脚本。我给你的东西没有经过测试。

首先,您将制作一个您想要删除的目录列表。所谓的〜/ .svn文件合并,排除

#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 

这应该工作。这里最重要的是恢复在目录上递归执行的'-R'选项。因此你的工作流程看起来像这样。

# cd path/to/branch 
# svn merge -r123:245 svn://svnserver.com/svn/trunk 
# revert_excludes_from_branch.sh 

然后,你会处理冲突,然后提交。如果您使用的是Windows,那么批处理文件也可以工作,您可以直接输入revert命令。