Как восстановиться после нежелательного переименования с помощью git-svn: «Транзакция устарела» - PullRequest
10 голосов
/ 27 мая 2010

Я использую 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

Я выздоровел из этой ситуации с простым SVN, используя обходные пути, подобные описанному в документации , но я не знаю, как восстановить с помощью git-svn. Что происходит и как мне это исправить?

Ответы [ 3 ]

8 голосов
/ 21 августа 2012

Удаление .git / svn у меня не сработало. Вместо этого вот как я решил:

  • Удалил поврежденные каталоги из хранилища (но я не уверен, что это необходимо. Оглядываясь назад, я думаю, что мог пропустить этот шаг)
  • git svn rebase
  • Во время ребазинга произошли некоторые конфликты. Для каждого конфликта я разрешал конфликты в текстовом редакторе, затем использовал git add <file-in-conflict>, а затем git rebase --continue
  • После успешного завершения перебазировки git svn dcommit успешно запустился!
4 голосов
/ 29 ноября 2010

Я не могу утверждать, что понимаю, что на самом деле происходит под капотом в git-svn в этом случае (хотя основная проблема SVN имеет смысл). Моя обычная стратегия, когда git-svn каким-то образом запутывается, - уничтожать каталог метаданных .git/svn (как в в этом посте ). Это почти всегда избавляет меня от нечетных проблем синхронизации между репозиториями git и SVN.

0 голосов
/ 25 ноября 2014

Это случилось со мной, когда я прервал процесс dcommit.

Выполните следующие действия для восстановления после ошибки:

  1. git svn rebase
  2. Вы получите конфликты в файлах. Разрешите конфликты & затем git add filename (в которых возник конфликт) для каждого файла.
  3. Теперь сделайте git svn dcommit. Он будет успешно удален.
...