我正在测试Subversion的最新版本,包括SVN命令行客户端和TortoiseSVN。(在此之前,我主要使用了引入合并信息属性和--reintegrate合并开关之前的版本。)
我已经进行了义务性的谷歌搜索,但是可能是我的搜索能力太差了,或者以下问题实际上是没有人解释和/或彻底解决的问题。我有点困惑,因为这里有很多有关该问题的报告 - 找到这些报告没有任何问题。我还发现了其他关于合并信息属性的讨论,但没有任何与我体验到的情况相匹配且解释/解决该问题的内容。
我希望能够提高我的搜索能力或者理解发生了什么事情以及该怎么处理。
以下是整个过程:
1. 我有一个主干(并且有一个基于它的工作副本) 2. 我创建了一个分支(并且有一个基于它的工作副本) 3. 我在主干的WC中进行了一些更改,并提交了 4. 我在分支的WC中做了一些工作并提交了 5. 现在我将主干的工作合并到我的分支的WC中,并解决所有冲突。
到目前为止都正常,但是当我尝试提交合并结果时,却收到一个消息,说明工作副本已过期,需要先更新。
这没有任何意义。合并之前,WC是最新的,合并的目标是WC。因此,在repo中不应该有任何改变。
深入挖掘发现,问题似乎在于合并信息属性本身。
我没有问题逐个提交更改的文件,但是之后WC仍然不干净/没有完全提交,并且因为WC不是最新的,我仍然无法提交。因此,Subversion似乎已经触及了repo和WC中的合并信息属性。
在这项调查中重复的情况下,我没有问题首先更新WC,然后再提交。但是我不确定是否始终如此,或者其他变体的现象是否更难解决。我也不希望尝试向附近的Subversion用户“解释”这个问题,他们并不将其视为其“主要工具”之一。
我已经反复测试了几年,并且我认为这个问题从合并信息和--reintegrate功能(1.5?)引入到现在都存在。可以这样吗?而且它仍然没有得到解决吗?
我的当前测试是使用命令行客户端(从CollabNetSubversion-client-1.6.17-4.win32.exe安装)和TortoiseSVN(TortoiseSVN-1.6.16.21511-win32-svn-1.6.17.msi),并且我得到相同的结果。
我已经使用Subversion很多年了,并自认为是一个“高级用户”。但是,对于这个问题,我束手无策。
补充说明:
以下是我能够重现问题的步骤:
1. 在“C:\Documents and Settings\johndoe\My Documents\SVN\Repo”中创建一个仓库。 2. 使用Repo浏览器,在“file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Trunk”中创建一个分支(r1)。 3. 使用Repo浏览器,在“file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Branches”中创建一个分支(r2)。 4. 在“C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Trunk”中创建一个工作副本(不生成新的版本)。 5. 在Trunk中创建一个文本文件test.txt,添加并提交(r3)。 6. 在“file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Branches/Branch1”中创建Trunk的一个分支(r4)。 7. 在“C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Branch1”中创建一个工作副本(不生成新的版本)。 8. 在基于Trunk的工作副本中,将一行文本添加到test.txt并提交(r5)。 9. 在基于Branch1的工作副本中,将一行文本添加到test.txt并提交(r6)。 10. 将Trunk合并到Branch1。右键单击“C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Branch1”,选择Tortoise SVN,选择Merge。选择“Merge a range of revisions”作为合并类型,URL to merge from: "file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Trunk",Revisions to merge:,Working copy: "C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Branch1",其余默认。在解决冲突对话框中选择“稍后全部解决”(不生成新的版本)。 11. 解决冲突。右键单击文件,选择Tortoise SVN,选择Edit Conflicts。在TortoiseMerge中,标记并选择“Theirs before mine”,点击“Mark as resolved”,保存并退出(不生成新的版本)。 12. 尝试提交Branch1中的更改。
此时我会收到一条消息。
这对我来说没有意义:合并之前,工作副本是最新的。此后没有创建新的修订版本(repo HEAD仍为r6),现在我的工作副本不再是最新的。
进一步调查发现,在第9步和第10步之间更新Branch1的WC可以解决问题。同样,这对我来说毫无意义: i)在更新结束时的对话中,没有报告实际更新的内容, ii)分支中唯一更改的事情已经提交。
因此,在我看来,WC既是“干净的”(没有未提交的内容),也是“最新的”(repo中没有要贡献给WC的内容)。
更新实际上唯一做的是将Branch1的工作副本的BASE从r4更改为r6。这在某种程度上很重要,但现在我的头脑太混乱了,无法确定细节。
我会欣赏任何新的想法,使我看到这里发生了什么。
补充2
进一步尝试澄清我的思路:指向的FAQ说
我已经进行了义务性的谷歌搜索,但是可能是我的搜索能力太差了,或者以下问题实际上是没有人解释和/或彻底解决的问题。我有点困惑,因为这里有很多有关该问题的报告 - 找到这些报告没有任何问题。我还发现了其他关于合并信息属性的讨论,但没有任何与我体验到的情况相匹配且解释/解决该问题的内容。
我希望能够提高我的搜索能力或者理解发生了什么事情以及该怎么处理。
以下是整个过程:
1. 我有一个主干(并且有一个基于它的工作副本) 2. 我创建了一个分支(并且有一个基于它的工作副本) 3. 我在主干的WC中进行了一些更改,并提交了 4. 我在分支的WC中做了一些工作并提交了 5. 现在我将主干的工作合并到我的分支的WC中,并解决所有冲突。
到目前为止都正常,但是当我尝试提交合并结果时,却收到一个消息,说明工作副本已过期,需要先更新。
这没有任何意义。合并之前,WC是最新的,合并的目标是WC。因此,在repo中不应该有任何改变。
深入挖掘发现,问题似乎在于合并信息属性本身。
我没有问题逐个提交更改的文件,但是之后WC仍然不干净/没有完全提交,并且因为WC不是最新的,我仍然无法提交。因此,Subversion似乎已经触及了repo和WC中的合并信息属性。
在这项调查中重复的情况下,我没有问题首先更新WC,然后再提交。但是我不确定是否始终如此,或者其他变体的现象是否更难解决。我也不希望尝试向附近的Subversion用户“解释”这个问题,他们并不将其视为其“主要工具”之一。
我已经反复测试了几年,并且我认为这个问题从合并信息和--reintegrate功能(1.5?)引入到现在都存在。可以这样吗?而且它仍然没有得到解决吗?
我的当前测试是使用命令行客户端(从CollabNetSubversion-client-1.6.17-4.win32.exe安装)和TortoiseSVN(TortoiseSVN-1.6.16.21511-win32-svn-1.6.17.msi),并且我得到相同的结果。
我已经使用Subversion很多年了,并自认为是一个“高级用户”。但是,对于这个问题,我束手无策。
补充说明:
以下是我能够重现问题的步骤:
1. 在“C:\Documents and Settings\johndoe\My Documents\SVN\Repo”中创建一个仓库。 2. 使用Repo浏览器,在“file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Trunk”中创建一个分支(r1)。 3. 使用Repo浏览器,在“file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Branches”中创建一个分支(r2)。 4. 在“C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Trunk”中创建一个工作副本(不生成新的版本)。 5. 在Trunk中创建一个文本文件test.txt,添加并提交(r3)。 6. 在“file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Branches/Branch1”中创建Trunk的一个分支(r4)。 7. 在“C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Branch1”中创建一个工作副本(不生成新的版本)。 8. 在基于Trunk的工作副本中,将一行文本添加到test.txt并提交(r5)。 9. 在基于Branch1的工作副本中,将一行文本添加到test.txt并提交(r6)。 10. 将Trunk合并到Branch1。右键单击“C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Branch1”,选择Tortoise SVN,选择Merge。选择“Merge a range of revisions”作为合并类型,URL to merge from: "file:///C:/Documents and Settings/johndoe/My Documents/SVN/Repo/Trunk",Revisions to merge:,Working copy: "C:\Documents and Settings\johndoe\My Documents\SVN\WCs\Branch1",其余默认。在解决冲突对话框中选择“稍后全部解决”(不生成新的版本)。 11. 解决冲突。右键单击文件,选择Tortoise SVN,选择Edit Conflicts。在TortoiseMerge中,标记并选择“Theirs before mine”,点击“Mark as resolved”,保存并退出(不生成新的版本)。 12. 尝试提交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
进一步尝试澄清我的思路:指向的FAQ说