SVN跳过的文件

时间:2013-09-12 20:05:46

标签: svn version-control merge smartsvn

当我尝试将代码从trunk合并到分支时,它将不会获取我的所有文件。这些文件将在合并日志中显示为“已跳过”。

当然我首先搜索了这个问题并找到了合并的常见问题,但没有提交,然后还原,然后合并。这些功能的某些顺序似乎会导致问题。该文件的某些内容仍在我的硬盘上但在SVN中没有,所以它被跳过了。我不认为这就是这里发生的事情。

我做的第一件事是我在本地删除了我的分支(我没有任何更改提交)。我从回购中提取了一份新的副本并再次尝试合并。我得到了同样的错误。我希望它能从我发现的东西中解决,我认为应该已经完成​​了它。

然后事情变得奇怪了。当我在顶级目录上进行合并(完全递归)时,我想添加的文件被“跳过”。但是,当我只合并子文件夹(即从/trunk/src/main/.../subfolder到/branch/src/main/.../subfolder)时,文件被“添加”。

所以我的问题是为什么粒度很重要?为什么在顶级文件中跳过文件,但如果我深入到文件级别则可以“添加”?

2 个答案:

答案 0 :(得分:1)

Subversion使用属性svn:mergeinfo来记录从哪里合并到给定分支的修订(属性内容基本上是已合并的位置和修订范围的列表)。如果进行合并,则svn会更改合并文件和合并根目录上的svn:mergeinfo。如果你然后恢复文件,但不恢复propset(并最终提交属性),那么你可能会遇到麻烦(因为合并的内容与svn 认为合并的内容不同)。但是如果你的分支机构没有提交,并且你有一份刚刚检查过的工作副本,那么这不应该是一个案例。

通常,跳过的消息意味着,在合并的修订版中,文件发生了更改,但您的工作副本中不存在此文件(请参阅SVN Book):这通常发生在您从错误的位置合并,或者您跳过了一些修订(例如创建文件的那些)。

答案 1 :(得分:0)

子目录可能是extern,即来自与其余代码不同的存储库 - 因此,如果您的大部分代码都在存储库A中,而某些东西,例如像公共库接口文件这样的东西来自存储库B,然后从代码的顶层提交到A并且允许更改存储库{{1}但是如果某个子目录被标记为(可能是部分)存储库B,那么从该子目录中检查 允许更改B