我在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
仍然可以正常工作。
我觉得我在这段历史中肯定做过些坏事。有没有办法修复这个或我可以进一步调查的任何地方?如果我可以避免它,我宁愿不导出/导入。感谢。
答案 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 .
$>
我的结论:其中之一:
svn switch
命令或另一个svn merge
,可能是向后发布