我正在 SVN 中进行稀疏 checkout ,对一个小更改进行合并,其中包括删除文件夹,这让我头疼。
这是一个例子:
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: Can't set properties on 'proc/new_folder/new_thing': invalid status for updating properties.
但是如果我像这样进行完整结帐:
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 .
稍微好一点,但仍然不理想
最佳答案
http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html
Avoid merges to targets with sparse directories. Likewise, don't merge to depths other than --depth=infinity
这可能就是 SVN 的工作原理;也就是说,在稀疏 check out 的工作副本上进行合并时效果不佳。
据我所知,在进行合并时,SVN 会将合并信息添加到文件和文件夹中。它在哪个级别添加合并信息取决于工作副本的构建方式。也就是说,SVN 足够“聪明”,知道如果您使用 --深度 空 checkout 一个文件夹,它只能将该修订版本的部分合并添加到该文件夹。如果您 checkout 该文件夹下的文件/文件夹,它也会在这些级别添加合并信息,稍后当 SVN 执行所谓的“删除”步骤时,它可能会合并该合并信息。
与 --深度无穷大的 checkout 相比,SVN 不需要跟踪较低级别的合并信息,并且可以有效地完全跳过该文件夹树的删除步骤。
因此,选项是,进行完整的 --深度无限检查,或者停止使用 SVN 的合并跟踪并与 --ignore-ancestry 合并,这将正确执行合并,但不会发布合并信息。
关于svn - 使用 SVN 合并文件夹删除会导致 "invalid status for updating properties"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37423739/