Инструмент, который вам действительно нужен: reposurgeon .
Как только вы достигнете размера вашей проблемы (10 с. Авторов, 1000 с. Коммитов), git filter-branch
будет слишком медленным и неуклюжим. Одновременно меняется только один автор, итерируя по всему репо, и весь процесс может занять несколько часов. У меня было 72 автора и 21000 коммитов, что заняло бы 18 часов!
Поначалу репохирург может показаться довольно сложным, но для этой задачи он очень прост.
Создайте файл отображения автора (скажем, authors.txt
), аналогичный тому, который требуется для svn2git
, в любом случае, содержащий по одной строке на каждого SVN-автора формы
oldauthor = New Author <new@email>
Здесь вы можете сопоставить нескольких авторов SVN одному фактическому автору, если хотите.
Зайдите в ваш конвертированный git-репозиторий и выполните
reposurgeon "verbose 1" "read" "authors read <../authors.txt" "write >../export"
Теперь у вас есть файл быстрого экспорта в каталоге верхнего уровня. Преобразуйте это обратно в реальный репозиторий следующим образом:
mkdir ../new-repo && cd ../new-repo
git init
git fast-import < ../export
git reset --hard HEAD # I needed this step for some reason
Вся процедура занимает менее 2 минут в моем большом репозитории, а также оставляет исходный git-репозиторий без изменений - полезно, если что-то идет не так. И это только вершина айсберга, который является репохирургом ... Спасибо, Эрик!