我在SVN中进行稀疏结账,为包含文件夹删除的小改动进行合并,这让我感到头疼。
以下是一个例子:
svn co https://bigrepo.company.com/ .
mkdir source_branch
mkdir source_branch/proc
mkdir source_branch/proc/new_folder
touch source_branch/proc/new_folder/new_thing
svn add . --force
svn ci
svn cp source_branch/ target_branch/
svn ci
然后在我想要合并的源分支中创建一个修订
svn del source_branch/proc/new_folder
svn ci
然后将它合并到另一个分支(稀疏结账)时:
svn co https://bigrepo.company.com/target_branch --depth empty .
svn up --depth empty proc
svn up --depth empty proc/new_folder
svn up --depth empty proc/new_folder/new_thing
svn merge https://bigrepo.company.com/source_branch -c 1635 .
svn给了我这个错误
svn:E155023:无法在&proc; / new_folder / new_thing'上设置属性:更新属性的状态无效。
但如果我像这样完整结帐:
svn co https://bigrepo.company.com/target_branch --depth infinity .
svn merge https://bigrepo.company.com/source_branch -c 1635 .
合并正常。为什么这不适用于稀疏结账?
我在不同级别进行了更新,我不确定为什么有些工作而有些人不做。
这不起作用:
svn co https://bigrepo.company.com/target_branch --depth empty .
svn up --depth empty proc/
svn up --depth infinity proc/new_folder
svn merge https://bigrepo.company.com/source_branch -c 1635 .
这有效:
svn co https://bigrepo.company.com/target_branch --depth empty .
svn up --depth infinity proc/
svn merge https://bigrepo.company.com/source_branch -c 1635 .
哪个好一点,但仍不理想
答案 0 :(得分:3)
http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html
避免与具有稀疏目录的目标合并。同样,不要合并到--depth = infinity
以外的深度
这可能就是SVN的工作原理;也就是说,在稀疏检查的工作副本上进行合并时效果不佳。
从我的能力来看,在进行合并时,SVN会将合并信息添加到文件和文件夹中。在哪个级别添加合并信息取决于工作副本的构建方式。也就是说,SVN是“聪明”的,足以知道如果你签出了一个带有--depth为空的文件夹,它只能为该修订版添加一个部分合并到该文件夹。如果您检出该文件夹下面的文件/文件夹,它也会在这些级别添加合并信息,它可能会在SVN执行所谓的“删除”步骤后合并该合并信息。
与--depth infinity的结帐相比,SVN不需要在较低级别跟踪合并信息,并且可以有效地跳过该文件夹树的完全删除步骤。
所以选项是,执行完整的 - 深度无限结账,或者停止使用SVN的合并跟踪并与--ignore-ancestry合并,这将正确执行合并,但不会发布mergeinfo。