Инструмент, который вы действительно хотите, это reposurgeon.
Как только вы доберетесь до своего размера проблемы (10 с авторами, 1000 коммитов) git filter-branch
слишком медленный и неуклюжий. Он меняет только одного автора одновременно, итерации по всему репо, и весь процесс может занять несколько часов. У меня было 72 автора и 21000 коммитов, которые заняли бы 18 часов!
В то время как репозиторий может быть довольно сложным на первый взгляд, для этой задачи он прост.
Создание файла автор отображения (например authors.txt
) аналогична той, которая требуется svn2git
в любом случае, содержащий одну строку на SVN автора формы
oldauthor = New Author <[email protected]>
Здесь вы можете сопоставить несколько авторов SVN в один фактический автор, если хотите.
Зайдите в переоборудованном репозиторий и сделать
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 минут на моем большом хранилище, а также оставляет исходный репозиторий неповрежденным - полезно в случае, если что-то пойдет не так. И это всего лишь верхушка айсберга, который был реконструирован ... Спасибо, Эрик!
svn не имеет (должен) иметь электронные письма для идентификаторов пользователей. Это может быть просто логин. –
Это правда. Я бы сказал, что это «имя», просто не полное имя. –
Не могли бы вы сослаться на «например» на то, что мне нужно было сделать? У меня около 10-15 пользователей за всю жизнь этого проекта, и я хотел бы переименовать их каждый из них; как их имена, так и их адреса электронной почты. –