1

我在 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仍然可以正常工作。

我觉得我在这段历史上一定做了坏事。有什么办法可以修复这个或我可以进一步调查的任何地方吗?如果可以避免的话,我宁愿不导出/导入。谢谢。

4

2 回答 2

0

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

对我来说,结帐后的那个命令svn merge .根本没有任何作用——除了例外。现在我想知道在您的案例中合并的这些更改来自哪里。您的示例中有一些奇怪的地方。

如果您真的一个接一个地执行了这三个步骤(结帐、cd、合并),那么通常没有可合并的更改。那么这两个版本 r33050 和 r36572 是从哪里来的呢?svn merge使用三个位置:两个“源”位置,谁的差异(修订)被合并到第三个,“目标”位置。该语法实际上允许省略单独目标的显式规范。但是,源和目标之间不能有任何差异,除非同时派生签出位置的存储库状态发生了变化。在这种情况下,您引用的输出是预期的,但您肯定会说如果在您的检出和合并尝试之间提交了 3500 个修订。

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

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

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

我的结论:其中之一:

  • 您的结帐和合并之间的存储库已更改。
  • 您的存储库在内部使用了一些不受支持的网络,例如文件系统中的 NFS,它总是会产生“有趣的”伪影。
  • 结帐和合并之间的 url 已更改(可能是别名或重定向?)。
  • 你省略了一些关于你做了什么导致你引用的结果的信息。
  • 你有一些附加的钩子,可能是通过 svn 属性,它采取了上述一些行动。
  • svn switch在结帐时发出命令或其他命令,svn merge可能是向后
  • 您根本没有检查头部,而是在过去的某个时间点进行了 3500 次修订。
于 2012-12-02T11:20:56.843 回答
0

我只是在这里尝试过,但效果不佳。据我了解,该命令的作用可能不是您想要的。

svn help merge说:

这种形式称为“同步”(或“追赶”)合并:

svn 合并源[@REV] [TARGET_WCPATH]

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

因此,通过此命令,您要求 svn 尝试应用路径“。”的所有更改。(我猜,翻译为“http://svn/myrepo”)到当前的 WC。当然,这必须失败。

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

于 2012-11-30T18:20:42.780 回答