当我尝试将代码从trunk合并到分支时,它将不会获取我的所有文件。这些文件将在合并日志中显示为“已跳过”。
当然我首先搜索了这个问题并找到了合并的常见问题,但没有提交,然后还原,然后合并。这些功能的某些顺序似乎会导致问题。该文件的某些内容仍在我的硬盘上但在SVN中没有,所以它被跳过了。我不认为这就是这里发生的事情。
我做的第一件事是我在本地删除了我的分支(我没有任何更改提交)。我从回购中提取了一份新的副本并再次尝试合并。我得到了同样的错误。我希望它能从我发现的东西中解决,我认为应该已经完成了它。
然后事情变得奇怪了。当我在顶级目录上进行合并(完全递归)时,我想添加的文件被“跳过”。但是,当我只合并子文件夹(即从/trunk/src/main/.../subfolder到/branch/src/main/.../subfolder)时,文件被“添加”。
所以我的问题是为什么粒度很重要?为什么在顶级文件中跳过文件,但如果我深入到文件级别则可以“添加”?
答案 0 :(得分:1)
Subversion使用属性svn:mergeinfo
来记录从哪里合并到给定分支的修订(属性内容基本上是已合并的位置和修订范围的列表)。如果进行合并,则svn会更改合并文件和合并根目录上的svn:mergeinfo
。如果你然后恢复文件,但不恢复propset(并最终提交属性),那么你可能会遇到麻烦(因为合并的内容与svn 认为合并的内容不同)。但是如果你的分支机构没有提交,并且你有一份刚刚检查过的工作副本,那么这不应该是一个案例。
通常,跳过的消息意味着,在合并的修订版中,文件发生了更改,但您的工作副本中不存在此文件(请参阅SVN Book):这通常发生在您从错误的位置合并,或者您跳过了一些修订(例如创建文件的那些)。
答案 1 :(得分:0)
子目录可能是extern
,即来自与其余代码不同的存储库 - 因此,如果您的大部分代码都在存储库A
中,而某些东西,例如像公共库接口文件这样的东西来自存储库B
,然后从代码的顶层提交到A
并且不允许更改存储库{{1}但是如果某个子目录被标记为(可能是部分)存储库B
,那么从该子目录中检查 允许更改B
。