2

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

当然我是先搜索issue,发现了merge但不commit,然后revert,然后merge的通病。这些功能的某些顺序似乎会导致问题。该文件仍在我的硬盘上但不在 SVN 中,因此被跳过。我不认为这就是这里发生的事情。

我做的第一件事是在本地删除了我的分支(我没有任何要提交的更改)。我从 repo 中提取了一个新副本并再次尝试合并。我得到了同样的错误。我希望它会从我已经发现的问题中得到解决,我认为应该这样做。

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

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

4

3 回答 3

3

“已跳过”消息意味着合并操作想要创建或修改一个文件,但该文件已存在于您的工作副本中并且不受版本控制。

当我尝试恢复添加文件的更改时遇到了同样的问题,由于某种原因,该文件没有从工作副本文件夹中删除,而是从存储库中删除。然后我再次进行了更改,但是当尝试合并它时,它跳过了一半的文件。

在这种情况下,解决方案是在目标文件夹上运行清理并单击“删除未受版本控制的文件和文件夹”。这将删除不应该存在的文件,并且下次应该进行合并

或者,如果您只有几个跳过的文件,则只需手动删除这些文件。

于 2021-09-08T12:08:14.103 回答
2

Subversion 使用一个属性svn:mergeinfo来记录从哪里合并到给定分支的修订(属性内容本质上是合并的位置和修订范围的列表)。如果您进行合并,svn 会同时更改合并的文件和合并的svn:mergeinfo根目录。如果您随后恢复文件,但不恢复 propset(并最终提交属性),那么您可能会遇到麻烦(因为合并的内容与 svn认为已合并的内容不同)。但是,如果您的分支中没有提交并且您有一个新签出的工作副本,那么这不应该是这种情况。

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

于 2013-10-04T15:56:15.563 回答
0

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

于 2013-09-16T22:22:10.697 回答