Мне нужно автоматизировать интерактивную перебазировку или заменить ее другими командами. Просто позвольте мне объяснить мою текущую ситуацию:
При переходе svn-> git мне нужно переустановить только что созданный репозиторий git, чтобы исправить «отсечки истории», сделанные во время SVN. Вот мой ручной рабочий процесс по устранению проблемы.
branchNEW: containing history from SOMEDAY until now
branchOLD: containing history from past to SOMEDAY
ИЗМЕНИТЬ или ascii:
branchNEW: Y - Z
branchOLD: W - X
Обе ветки не имеют общих коммитов.
Основная идея теперь состоит в том, чтобы просто переназначить branchNEW на branchOLD. К сожалению, СЕГОДНЯ был проведен некоторый рефакторинг: некоторые файлы были перемещены в другой каталог. Результатом перебазирования является то, что каждый перемещенный файл существует в обоих местах.
ИЗМЕНИТЬ
some file exist in X
the (nearly) same files also exist in Y, just on another path
branchNEW: W - X - Y - Z
(after rebase)
После перебазирования HEAD теперь содержит файлы X и Y. Я также попытался добавить новую фиксацию в branchOLD, которая удаляет старые файлы. После перебазирования SVN-HEAD и git-HEAD бинарно идентичны, но «git log --follow» не работает.
Теперь к основной проблеме: я могу исправить это, используя вторую интерактивную перестановку:
git rebase -i SHA
SHA - это sha-id старой корневой фиксации в branchNEW. Теперь в редакторе мне нужно изменить «выбрать» на «редактировать» для самого верхнего коммита. После выхода из редактора мне теперь нужно удалить не те файлы
git rm -f fileA fileB
git commit --amend
git rebase --continue
После этого HEAD git становится двоичным, идентичным заголовку SVN, и, кроме того, git имеет полную историю, а также "git log --follow" работает для перемещенных файлов.
Поскольку этот шаг - лишь небольшая часть огромного перехода на VCS в будущем, мне нужно написать сценарий всего процесса. Но как автоматизировать описанные выше действия?
(я знаю, что SHA не останется прежним, но я могу получить требуемый SHA из svn-id, который встроен в каждое сообщение фиксации)
git filter-branch
мог бы вам помочь. - person jub0bs   schedule 19.09.2014