svn在重命名的文件上合并

svn在重命名的文件上合并,svn,merge,mv,Svn,Merge,Mv,首先,我从主项目中创建一个分支 $ svn cp project branched 然后我重命名分支中的一些文件: $ svn mv branched/file.c branched/file.cpp 提交/更新后,其他人对原始项目中的原始文件进行更改,如何合并这些更改 $ svn merge project/file.c branched/file.cpp svn: E195002: Invalid merge source 'project/file.c'; a working copy

首先,我从主项目中创建一个分支

$ svn cp project branched
然后我重命名分支中的一些文件:

$ svn mv branched/file.c branched/file.cpp
提交/更新后,其他人对原始项目中的原始文件进行更改,如何合并这些更改

$ svn merge project/file.c branched/file.cpp
svn: E195002: Invalid merge source 'project/file.c'; a working copy path can only be used with a repository revision (a number, a date, or head)
这仅仅是一个语法问题,还是正如一位同事所建议的那样,是一个更深层次的问题,使得重命名的文件基本上无法保持同步?如果是这样,重命名文件并保持同步的正确方法是什么

合并源'project/file.c'无效;只能使用工作副本路径 与存储库修订版一起使用”

让我们把它分解一下

“合并源'project/file.c'无效”

SVN在理解“project/file.c”的含义时遇到问题。注意:SVN正试图使用您告诉它要使用的同一文件,并且该文件显然存在于您的系统中。这里的重命名没有问题

“工作副本路径”

您正在告诉SVN从工作副本中已存在于计算机上的文件合并。这不是正常使用。通常,指定要从中合并的存储库URL。支持此使用,但:

“只能与存储库修订版一起使用”

…如果您尝试从工作副本合并,实际上您只是告诉SVN您正在谈论的文件,SVN仍将使用存储库服务器获取合并数据。因此,您需要告诉SVN要合并的版本。例如:

$ svn merge -r HEAD project/file.c branched/file.cpp
然而,你在这里做的另一件奇怪的事情是合并一个文件。通常,您希望合并整个目录树,而不是单个文件。因此,我建议对以下内容进行修改:

$ svn merge http://example.com/svn/path/to/project branched
请在此处阅读有关合并的内容:


1。合并子树在这里并不奇怪,在这种特定情况下,如果没有这样的合并,以后合并整个树将产生“树冲突”2
-r HEAD
在merge中是多余的(HEAD是merges的默认值),这基本上是有道理的,但我尝试了您的最后一个示例:
$svn mergehttps://.../project/ 分支/文件_util.cpp
svn:E195016:'https://.../project@5650'必须与'https://.../branch/file.cpp@5650'Oops,打字错误。现在修好了。谢谢,这很有效,尽管我确信我昨天试过了,但还是出错了。。。虽然我想我是在尝试使用“^”。但昨天的问题是,我给出了一个命令,上面说“将整个主干目录合并到这个特定的文件中”,这显然不应该起作用。但是现在答案中已经确定使用两个目录。