Я искал связанные вопросы, но я не мог найти ничего, что соответствовало моей конкретной ситуации: у меня есть старые архивы хранилищ с сервера SVN, которые были сняты много лет назад. Это архивы исходной структуры репозитория на сервере. То, что я хочу сделать, это преобразовать их в хранилища git в качестве основы для будущей работы/восстановления проектов. Я уже прочитал несколько руководств по процессу конверсии, и я думаю, что могу определить преобразование авторов, отображение ветвей и т.д., Но все они предполагают, что у вас есть SVN-сервер и URL-адрес репозитория. Нужно ли устанавливать и настраивать сервер SVN для этого преобразования, или есть ли способ указать, что у меня есть git clone
или svn2git
(или другой инструмент) на дампе репо?
Преобразование локального дампа репозитория svn в git
Ответ 1
установить subversion локально, чтобы импортировать дамп, затем с пакетом git -svn.
Вы можете использовать git svn clone file:///path/to/svn/repo /path/to/empty/dir
Ответ 2
Получить список всех коммиттеров Subversion:
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt
Клонировать репозиторий Subversion с помощью git -svn:
git svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp
Преобразование svn: игнорировать свойства .gitignore:
cd ~/temp
git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'
Переместить репозиторий в голый репозиторий git:
git init --bare ~/new-bare.git
cd ~/new-bare.git
git symbolic-ref HEAD refs/heads/trunk
Затем переместите репозиторий temp в новый открытый репозиторий.
cd ~/temp
git remote add bare ~/new-bare.git
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare
Переименуйте ветвь "trunk" на "master" :
cd ~/new-bare.git
git branch -m trunk master
Очистка ветвей и тегов:
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
Ответ 3
- Для всех преобразователей (?) svn → git требуется постоянный репозиторий Subversion,
- Дерево-копия репозитория не является дампом, это обычная резервная копия на уровне файлов.
У вас есть:
- Установите и настройте любой сервер Subversion (если ваш конвертер не может обрабатывать протокол
file:///
для SVN, в противном случае он не нужен - просто распакуйте tarball и проверьте репо с клиентом svn) - Подробнее о git -svn
- Используйте git -svn