如何使用git-svn从不需要的重命名中恢复:“事务已过期”

时间:2010-05-27 14:34:12

标签: git-svn

我正在使用git-svn。我已经将文件“A”移动到“B”,并且我使用了svn HEAD(使用git svn rebase)。我可以毫无问题地提交所有其他更改。现在我已经决定将'B'移回'A'并提交更改。

当我执行移动并提交给我的本地主人时,它工作正常,但在执行git svn dcommit时我得到以下内容:

Transaction is out of date: Out of date: 'A' in transaction '3652-1' at /opt/local/libexec/git-core/git-svn line 570

所以我尝试在单独的提交中复制和删除,结果是:

Item already exists in filesystem: File already exists: filesystem '/usr/svn/db', transaction '3652-1', path 'A' at /opt/local/libexec/git-core/git-svn line 4735

我通过使用documentation中描述的解决方法,使用简单的svn恢复了这种情况,但我不知道如何使用git-svn进行恢复。发生了什么,我该如何解决?

3 个答案:

答案 0 :(得分:8)

删除.git / svn对我不起作用。相反,这是我解决的方式:

  • 从存储库中删除了有问题的目录(但我不确定这是否有必要。事后我觉得我可以跳过这一步)。
  • git svn rebase
  • 在rebase期间,有一些冲突。对于每次冲突,我在文本编辑器中解决了冲突,然后使用git add <file-in-conflict>然后git rebase --continue
  • rebase成功完成后,git svn dcommit成功运行!

答案 1 :(得分:4)

在这种情况下,我无法理解git-svn内部真正发生的事情(虽然潜在的SVN问题非常有意义)。当git-svn以某种方式混淆时,我通常的策略是吹走.git/svn元数据目录(如this post中所述)。这几乎总能让我免于git和SVN存储库之间的奇怪同步问题。

答案 2 :(得分:0)

当我打断dcommit进程时,它发生在我身上。

按照以下步骤从错误中恢复:

  1. git svn rebase
  2. 您将在文件中遇到冲突。解决冲突和然后为每个文件git add filename(发生冲突)。
  3. 现在做git svn dcommit。它将被成功推送到远程。