修复部分提交Subversion svn move命令导致的树冲突

时间:2013-07-11 07:13:56

标签: svn

我使用svn movesvn ci做了一些严重的愚蠢。

旧目录结构:

source/branch1/test_framework/
source/branch2/test_framework/

所需的目录结构:

source/branch1/
source/branch2/
source/test_framework/ <-- This is a merge of the 2

预期步骤:

  • 将source / branch1 / test_framework /移至source / test_framework /
  • 将source / branch2 / test_framework /合并到source / test_framework /

我是如何开始的:

[dev@bld Prod1]$ svn move source/branch1/test_framework/ source/test_framework/
A         source/test_framework
D         source/branch1/test_framework/main.sh
D         source/branch1/test_framework

我应该做些什么:

[dev@bld Prod1]$ svn ci source/test_framework/ source/branch1/test_framework/ -m "Move test framework to top level."

我的愚蠢

[dev@bld Prod1]$ svn ci source/test_framework/ -m "Move test framework to top level."
Authentication realm: <http://localhost:8443> UNIX/LDAP User Account
Password for 'dev':
Adding         source/test_framework

Committed revision 274232.

[dev@bld Prod1]$ svn ci source/branch1/test_framework/ -m "Move test framework to top level."
Authentication realm: <http://localhost:8443> UNIX/LDAP User Account
Password for 'dev':
Deleting       source/branch1/test_framework
svn: Commit failed (details follow):
svn: Item '/repo/CoreApps/Prod1/source/branch1/test_framework' is out of date

在这里,我查看了Google和StackOverflow并针对Item ... out of date错误建议了以下修复:

[dev@bld Prod1]$ svn update
Authentication realm: <http://localhost:8443> UNIX/LDAP User Account
Password for 'dev':
   C source/branch1/test_framework
At revision 274233.
Summary of conflicts:
  Tree conflicts: 1

现在我对此感到困惑:

[dev@bld Prod1]$ svn ci source/branch1/test_framework/ -m "Move test framework to top level."
Authentication realm: <http://localhost:8443> UNIX/LDAP User Account
Password for 'dev':
svn: Commit failed (details follow):
svn: Aborting commit: '/repo/CoreApps/Prod1/source/branch1/test_framework' remains in tree-conflict

现在我该如何解决这个冲突?请注意svn merge不是问题,而只是我到达此处的解释点。

我很欣赏能够解释如何做的答案。

修改 - 我用来修复问题的解决方案(这不太理想。接受的答案更好):

  • svn status source/branch1/test_framework/列出svn move
  • 期间删除的文件
  • svn revert source/branch1/test_framework/$FILE针对上面列出的每个文件撤消svn move的删除/删除操作
  • svn delete source/test_framework/撤消svn move后跟svn ci source/test_framework/签名删除的复制操作。
  • 做得正确。

1 个答案:

答案 0 :(得分:1)

  1. 签出新的工作副本,撤消错误的修订(svn merge -c-274232。),commit
  2. 从头开始
  3. 这是Subversion中的一种撤销/重做功能,这是一种通过错误提交来解决存储库的混乱状态的通用方法,当顶部没有很多提交并且凌乱的提交没有多少时其中的智力工作(这正是你的情况,提交是一个简单的svn mv)。所以基本上我建议盲目地回滚变化,甚至不试图理解凌乱的状态(并节省时间),然后正确地重复svn mv