См. Инструкции ниже для преобразования SVN-репозитория в git-репозиторий
Примечание: ТОЛЬКО чтобы увидеть список пользователей, запустите позицию 1.
КОНВЕРТ СВН РЕПО в ГИТ РЕПО
1. Получить список всех коммиттеров Subversion
$ svn log -q https://svn.example.com/repository_name | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt
Это будет захватывать все сообщения журнала, извлекать имена пользователей, удалять любые дубликаты имен пользователей, сортировать имена пользователей и помещать их в файл «hors-transform.txt ». Теперь отредактируйте каждую строку в файле. Например, преобразуйте :
username = username <username>
в это:
username = Firstname Lastname <username@example.com>
2. Клонировать хранилище Subversion, используя git-svn
git svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp
3. Конвертировать svn: игнорировать свойства в .gitignore
Если в вашем репозитории svn использовались свойства svn: ignore, вы можете легко преобразовать это в файл .gitignore, используя:
cd ~/temp
git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'
4. Переместить репозиторий в пустой репозиторий git
Сначала создайте пустой репозиторий и сделайте так, чтобы его ветвь по умолчанию соответствовала имени ветки svn "trunk".
git init --bare ~/new-bare.git
cd ~/new-bare.git
git symbolic-ref HEAD refs/heads/trunk
cd ~/temp
git remote add bare ~/new-bare.git
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare
Теперь вы можете безопасно удалить ~ / temp репозиторий.
5. Переименуйте ветку "Магистраль" в "Мастер"
Ваша основная ветка разработки будет называться «trunk», что соответствует имени, которое было в Subversion. Вы хотите переименовать ее в стандартную «master» ветку Git, используя:
cd ~/new-bare.git
git branch -m trunk master
6. Очистить ветки и метки
git-svn превращает все теги Subversions в очень короткие ветви в Git в форме «теги / имя». Вы хотите преобразовать все эти ветви в настоящие теги Git, используя:
cd ~/new-bare.git
git for-each-ref --format='%(refname)' refs/heads/tags |
cut -d / -f 4 |
while read ref
do
git tag "$ref" "refs/heads/tags/$ref";
git branch -D "tags/$ref";
done
7. Переместить пустой репозиторий в центральный удаленный репозиторий
Пример того, как переместить ваш локальный пустой репозиторий в репозиторий gitolite:
mv new-bare.git repository_name.git
tar czvf repository_name.git.tar.gz repository_name.git/
scp repository_name.git.tar.gz remote_host:
ssh remote_host
tar xzvf repository_name.git.tar.gz
sudo chown -R git:staff repository_name.git/
cd repository_name.git/
find . -type f -exec chmod go= {} \; # remove group and world permissions
find . -type d -exec chmod go= {} \; # remove group and world permissions
cd ../
mv repository_name.git /Users/git/repositories/
8. Клонировать новую локальную копию
mv old-svn-copy old-svn-copy.backup
git clone git@remote_host:repository_name.git
Вывести список всех неверсионных файлов из вашего старого локального хранилища svn и скопировать их в новый локальный репозиторий git:
cd old-svn-copy.backup
git clean -dXn # Using this command because the old copy was a git-svn clone
cp example-file.txt ../repository_name/ # copy all files and directories from the list that you need in the new local git repository
Теперь вы можете переместить резервную копию локальной копии SVN в корзину. Это может быть хорошей идеей, чтобы не очищать мусор, пока вы не убедитесь, что все работает правильно.
9. Готово.
Источник здесь