svn merge表示所有内容都绝对冲突

svn merge表示所有内容都绝对冲突,svn,Svn,我尝试使用“svn合并”将主干更改同步到分支中,但subversion说每个文件都有冲突。这些文件中的大多数在主干或分支中都没有更改。我也没有改变目录结构。我做错了什么 更详细地说,我在我的计算机上的分支中,位于/Users/steve/myproject/nsvbranch。我输入“svn合并”。这是与nsvbranch相同目录的主干版本;“ls”在这两种情况下返回相同的文件。服务器会花一点时间,然后绝对地列出每个文件,旁边有一个“C”。对于其中几个,但不是全部,它问我如何处理冲突。在几乎所有

我尝试使用“svn合并”将主干更改同步到分支中,但subversion说每个文件都有冲突。这些文件中的大多数在主干或分支中都没有更改。我也没有改变目录结构。我做错了什么

更详细地说,我在我的计算机上的分支中,位于/Users/steve/myproject/nsvbranch。我输入“svn合并”。这是与nsvbranch相同目录的主干版本;“ls”在这两种情况下返回相同的文件。服务器会花一点时间,然后绝对地列出每个文件,旁边有一个“C”。对于其中几个,但不是全部,它问我如何处理冲突。在几乎所有的文件中,包括它询问我如何处理冲突的几个文件,自分支创建以来,主干或分支都没有做任何更改

很明显,我犯了一个非常简单的初学者错误,但我似乎不知道它是什么。谢谢你的帮助


-Steve

最可能的原因是SVN错误地选择了要合并的修订范围

SVN的1.4版对合并的支持非常弱。如果您要定期合并,我建议您更新SVN


如果您决定继续使用SVN 1.4,则必须在合并时手动指定修订范围。

您不应再使用版本1.4。Subversion 1.5中有一个重大变化,在Subversion中添加了合并跟踪。事实上,我很惊讶没有人在您的系统上设置预提交触发器来阻止您提交用版本1.4修改的代码

因为您使用的是Subversion 1.4,所以可能还有其他问题。例如,您无法区分合并的内容和未合并的内容。在Subversion 1.5之前的版本中,需要指定要合并的所有修订。手动。查找属性
svn:mergeinfo
并查看合并内容的最佳方法:

$ svn propget -R svn:mergeinfo .
这将打印出所有合并以及合并的修订。您可以使用它来确定需要合并哪些修订。例如,如果您看到您使用的是版本2300,并且svn:mergeinfo显示版本1230-2298已经从该分支合并,则需要指定要将版本2299合并到2300:

$ svn merge -r2299:2300 $REPO/$branch/$project
完成此操作后,需要使用最新的合并信息更新
svn:mergeinfo

$ svn pe svn:mergeinfo .  #And all files/directories where this is set
另一种可能是有人删除并重新创建了分支/主干。想象有人这样做:

$ svn co $REPO/trunk/foo
A foo/bar.txt
A foo/foo.txt
$ cd foo
$ svn delete bar.txt
$ svn commit -m"Deleted bar.txt"
$ svn up
$ vi bar.txt
$ svn add bar.txt
$ svn commit -m"Added bar.txt back in"
在你凡人眼里,你认为这两个版本的
$REPO/trunk/foo/bar.txt
是一样的。毕竟,它们都有URL
$REPO/trunk/foo/bar.txt
。要进行颠覆,这两个
bar.txt
是两个完全不同的文件,没有任何共同之处。如果有人在
$REPO/branchs/1.2/foo/bar.txt中进行了更改,而您试图合并此更改,则会出现合并冲突。事实上,合并冲突会告诉您本地添加正在进行更新

我已经看到很多地方决定主干需要匹配分支,他们删除了主干,并从分支复制了文件。事实上,我已经看到了:

$ svn delete -m"Who needs trunk?" $REPO/trunk  #Delete trunk
$ svn add -m"Making a real mess of things" $REPO/trunk #Add a new trunk
$ svn co $REPO/trunk  # Check out the now empty trunk
$ cd trunk
$ cp -R $work/branches/1.4 .  #Copy a branch 1.4 working directory to trunk
$ svn add .  #Now add all of those files back in
$ svn commit -m"A trunk with files that aren't related to anything!"
在这种情况下,开发人员不仅删除了主干,而且简单地创建了一个新的空主干,将文件复制到Subversion的后面,然后重新读取。主干中的每个文件都与存储库中的任何文件完全无关,即使它们共享相似的URL。在本例中,他们还想知道为什么不能从分支合并回主干。毕竟,这些文件就是从那里来的

如果这样做了,你基本上是在一个没有任何推进手段的相当腐烂的河口


我唯一可以添加的建议是尝试
svn合并--忽略ancestory
。我还建议您尝试使用
--dry run
参数来查看合并将如何进行,而不会影响任何事情

谢谢你的帮助。鉴于我无法将服务器subversion更新为当前版本,我输入了修订号。事实证明,通过这种方式进行合并非常容易。我在日志中查找分支的位置,然后输入“merge-r2050:2121”。然后事情发生了


-Steve

SVN服务器和SVN客户端的版本是什么?感谢您的回复。我使用的是服务器版本1.4.2和客户端版本1.6.18-史蒂文:谢谢你的帮助。我问过我们的技术人员关于更新服务器subversion的问题,他说这正在进行中,可能会在今年的某个时候发生。我没有屏住呼吸。下一步我将尝试其他方法-史蒂夫