Как восстановиться после нежелательного переименования с помощью 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
процесс.
Выполните следующие действия для восстановления после ошибки:
git svn rebase
- Вы получите конфликты в файлах. Разрешите конфликты и затем
git add filename
(в котором произошел конфликт) для каждого файла. - Сейчас делаю
git svn dcommit
, Он будет успешно удален.