SVN文件夹无法合并到自身或从中分支的任何内容

时间:2012-09-28 20:44:17

标签: svn

我在SVN中有一个似乎有身份危机的文件夹。我可以检查并分支它,但任何合并都会失败。

svn co http://svn/myrepo
cd myrepo
svn merge .

以上产生类似这样的内容(缩写):

--- Merging r33050 through r36572 into '.':
   C Gemfile.lock
   C test_source/src/...
Skipped missing target: 'test_source/libs'
 G   test_source/src
 G   test_source
Skipped missing target: 'source/Rakefile'
Skipped missing target: 'source/Gemfile'
Skipped missing target: 'source/libs'
Skipped missing target: 'source/Gemfile.lock'
   C source/src/...
 G   source
   C Rakefile
   C Gemfile
 G   .
Summary of conflicts:
  Tree conflicts: 26
  Skipped paths: 5

同样,如果我从这个文件夹svn cp http://svn/myrepo http://svn/myrepo2分支,那么分支同样不能合并到自身,也不能将主干合并到它中,反之亦然。

所有这一切,svn up仍然可以正常工作。

我觉得我在这段历史中肯定做过些坏事。有没有办法修复这个或我可以进一步调查的任何地方?如果我可以避免它,我宁愿不导出/导入。感谢。

2 个答案:

答案 0 :(得分:0)

我刚刚在这里试过,它也不起作用。据我所知,命令的作用可能不是你想要的。

svn help merge说:

  

此表单称为'sync'(或'catch-up')合并:

     

svn merge SOURCE [@REV] [TARGET_WCPATH]

     

同步合并用于获取父项上所做的所有最新更改   科。换句话说,最初创建了目标分支   通过复制源分支以及在源上提交的任何更改   分支以来分支应用于目标分支。这用   合并跟踪以跳过所有已经过的修订   合并,因此可以定期重复同步合并以保持最新   与源分支的日期。

因此,通过此命令,您可以让svn尝试应用路径的所有更改“。” (我猜,这转化为“http:// svn / myrepo”)到当前的WC。当然,这必定会失败。

我没有看到你想用这个命令做什么有用的服务。如果您想“导入”最新的更改,一个简单的svn up会将服务器中的所有新更改集成到您的WC中。

答案 1 :(得分:0)

虽然我同意这里的所有评论者的意见,你所做的合并命令没有任何意义,我想仔细看看。所以我也试过自己,完全没有得到你所描述的结果。

对于我来说,结帐后立即命令svn merge .根本不做任何事情 - 例外。现在我想知道在你的案例中合并的那些变化来自哪里。你的例子中有些奇怪的东西。

如果你真的一个接一个地做了这三个步骤(结账,cd,合并),那么通常没有可以合并的变化。那么这两个版本r33050& r36572来自哪里? svn merge使用三个位置:两个“源”位置,其中差异(修订版)合并到第三个“目标”位置。语法实际上允许省略单独目标的显式规范。但是,当源于结账的位置的存储库状态在平均时间内发生变化时,源和目标之间不会有任何差异。在 情况下,您引用的输出是预期的,但您肯定会说,如果您的结帐和合并尝试之间提交了3500次修订。

因此,您的设置必须有不同之处。您真的可以排除存储库在结帐和合并之间发生变化的可能性吗?也许repositoy不是由你维护的?也许通过导入所有修订版重新加载了一些备份?或者位置可能在中间移动了?那些东西可以解释输出,如果不是详细的那么至少在一般情况下。

在存储库方面没有任何更改,我得到了人们的期望:

$> svn co https://.../[...]
$> cd [...]
$> svn merge . 
$> 

我的结论:其中之一:

  • 您的结帐和合并之间的存储库已经更改。
  • 您的存储库在内部使用一些不受支持的网络,如文件系统中的NFS,它总是产生“有趣”的文物。
  • 在结帐和合并之间更改了网址(可能是别名或重定向?)。
  • 您省略了一些有关您所做的事情的信息,这些信息会导致您引用的结果。
  • 你有一些附加的钩子,可能是svn属性,它采取了一些上述动作。
  • 在结帐时发出svn switch命令或另一个svn merge,可能是向后发布
  • 你根本没有检查头部,但过去有一些时间点3500修订。