Как восстановиться после нежелательного переименования с помощью 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

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

3 ответа

Решение

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

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

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

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

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

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