Преобразование локального дампа SVN репо в Git

Я искал похожие вопросы, но не смог найти ничего подходящего для моей конкретной ситуации: у меня есть несколько старых архивов репозитория с сервера SVN, которые были сняты много лет назад. Это архивы исходной структуры хранилища на сервере. Я хочу преобразовать их в git-репозитории в качестве основы для будущей работы / возрождения проектов. Я уже прочитал несколько учебных пособий о процессе преобразования, и я думаю, что смогу выяснить преобразование авторов, сопоставление ветвей и т. Д., Но все они предполагают, что у вас есть сервер SVN и URL-адрес для хранилища. Нужно ли устанавливать и настраивать сервер SVN, чтобы выполнить это преобразование, или я могу указать git clone или же svn2git (или другой инструмент) на дамп репо у меня есть?

4 ответа

Решение

Установить subversion локально, чтобы импортировать ваш дамп, затем с пакетом git-svn.

Ты можешь использовать git svn clone file:///path/to/svn/repo /path/to/empty/dir

Получить список всех коммиттеров 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: ignore в.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

Затем вставьте временный репозиторий в новый пустой репозиторий.

cd ~/temp
git remote add bare ~/new-bare.git
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare

Переименуйте ветвь "ствол" в "мастер":

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

Ссылка: http://john.albin.net/git/convert-subversion-to-git

  1. Все (?) Svn -> git конвертеры требуют живого хранилища Subversion,
  2. Древовидная копия хранилища - это не дамп, а обычная резервная копия на уровне файлов.

У тебя есть:

  1. Установите и настройте любой сервер Subversion (если ваш конвертер не справляется file:/// протокол для SVN, иначе он не нужен - просто распакуйте tarball(s) и проверьте репо с помощью svn client)
  2. Читайте о git-svn
  3. Используйте git-svn

В reposurgeon инструмент поддерживает прямое (и очень быстрое) преобразование файлов дампа SVN в репозитории Git.

  1. Возьмите файл дампа в ваших серверах:

    svnadmin dump "repopath or url" > import.bkp
    
    git svn clone "back" 
    
  2. Перейдите к пути клонирования, затем откройте git bash и выполните следующие команды:

    git svn show-ignore > .gitignore
    
    git add .gitignore
    
    git commit -m "with message"
    
    git check in "git url"
    
Другие вопросы по тегам