【发布时间】:2011-07-20 11:51:27
【问题描述】:
我正在测试最新版本的 Subversion,包括 SVN 命令行客户端和 TortoiseSVN。 (到目前为止,我一直在使用引入 mergeinfo 属性和 --reintegrate 合并开关之前的大部分版本。)
我已经完成了强制性的谷歌搜索,但要么有非常糟糕的 Google-fu,要么接下来的问题实际上是一个没有人解释和/或彻底解决的问题。我觉得这有点令人费解,因为这里有很多关于这个问题的报告——找到这些报告没有问题。我还找到了关于 mergeinfo 道具的其他讨论,但没有任何内容真正匹配并解释/解决我的经验。
如果能帮助我升级我的 Google-fu 或了解发生了什么以及如何处理它,我将不胜感激。
这里是:
我有一个主干(和一个基于它的工作副本)
我创建了一个分支(以及基于它的工作副本)
我对主干的WC做了一些改动并提交
我在分支的 WC 中做了一些工作并提交
我现在将主干中的工作合并到我分支的 WC,解决所有冲突。
到目前为止,一切都按预期进行,但是当我尝试提交合并结果时,我收到一条消息,指出工作副本已过时,需要先更新。
这毫无意义。 WC 在合并之前是最新的,合并的目标是 WC。所以在 repo 中根本不应该改变任何东西。
深入挖掘似乎是 mergeinfo 属性本身就是问题所在。
我单独提交更改的文件没有问题,但之后 WC 仍然脏/未完全提交,我仍然无法提交,因为 WC 不是最新的。因此,Subversion 似乎一直在处理 repo 和 WC 中的 mergeinfo 属性。
在我重复此调查的情况下,我可以先更新 WC,然后再提交。但我不确定情况是否总是如此,或者这种现象的其他变体将更难解决。我也不期待尝试向附近的 Subversion 用户“解释”这一点,他们没有将此作为他们的“主要工具”之一。
我已经反复测试了几年,我认为这个问题从引入 mergeinfo 和 --reintegrate 功能(1.5?)到现在一直存在。可以这样吗?它仍然没有解决?
我目前的测试已经使用命令行客户端(从 CollabNetSubversion-client-1.6.17-4.win32.exe 安装)和 TortoiseSVN (TortoiseSVN-1.6.16.21511-win32-svn-1.6.17.msi ),我得到相同的结果。
我已经使用 Subversion 很多年了,并且将自己描述为“超级用户”。尽管如此,在这个问题上,我还是站在我的裤子下面..
附录
以下是我可以重现问题的步骤:
在“C:\Documents and Settings\johndoe\My 文档\SVN\Repo"
使用 Repo 浏览器,创建“file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Trunk" (r1)
使用 Repo 浏览器,创建“file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Branches” (r2)
在“C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Trunk”中创建主干的工作副本(无新版本)
在trunk中,创建一个文本文件test.txt,添加并提交(r3)
在“file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Branches/Branch1”(r4)中创建主干分支
在“C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Branch1”中创建此分支的工作副本(无新版本)
在基于Trunk的工作副本中,添加一行文本到test.txt并提交(r5)
在基于Branch1的工作副本中,添加一行文本到test.txt并提交(r6)
将主干合并到分支。右键单击“C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Branch1",Tortoise SVN,合并。 合并类型“合并一系列修订”,要合并的 URL: "file:///C:/Documents and Settings/johndoe/我的 Documents/SVN/Repo/Trunk",要合并的修订:,工作 复制:“C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Branch1",其他一切默认。在 Resolve 冲突对话“稍后解决”。 (没有新版本)
解决冲突。右键单击文件,Tortoise SVN,编辑 冲突。在 TortoiseMerge 中,标记并选择“Theirs before mine”, 点击“标记为已解决”,保存退出。 (没有新版本)。
尝试在 Branch1 中提交更改。
此时我收到一条消息
Commit
C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Branch1
Commit failed (details follow):
Directory '/Branches/Branch1' is outof date
You have to update your working copy first.
这对我来说没有意义:在合并之前,工作副本是最新的。之后没有创建新的修订(repo HEAD 仍然是 r6),现在我的工作副本不是最新的。
进一步调查,似乎早在第 9 步和第 10 步之间更新 Branch1 的 WC 就可以解决问题。同样,这对我来说毫无意义: i) 在更新结束时的对话中,没有任何报告为实际更新,并且 ii) 分支中唯一改变的事情已经提交。 因此,在我看来,WC 既“干净”(没有未提交的内容)又是最新的(repo 中没有任何内容可以为 WC 做出贡献)。
该更新实际上所做的唯一事情是将 Branch1 工作副本的 BASE 从 r4 更改为 r6。这在某种程度上很重要,但现在我的头在旋转,以至于我无法确定细节。
如果有任何新鲜的想法能让我了解这里发生了什么,我将不胜感激。
附录 2
进一步试图澄清我的想法:指向的常见问题解答说
当 Subversion 提交时,客户端只会修改版本号 提交涉及的节点,而不是工作副本中的所有节点。这 意味着在单个工作副本中,文件和子目录 可能处于不同的修订版,具体取决于您上次提交的时间 他们。在某些操作中(例如,目录属性 修改),如果存储库具有更新版本的 节点,提交将被拒绝,以防止数据丢失。
在我的例子中,我将“节点”解释为“file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Branches/Branch1”。正如我所看到的,存储库没有“[那个]节点的更新版本”。总的来说,repo 的 HEAD 是 r6,但相关节点的最新版本是 r4。
【问题讨论】:
标签: svn merge tortoisesvn branch