Close

Git convert: A step in migration from SVN to Git

Следующий шаг перехода от SVN к Git — импорт содержимого репозитория SVN в новый репозиторий Git. Мы осуществляем это с помощью утилиты git svn, которая поставляется вместе с большинством сборок Git, а затем очищаем результат, используя для этого svn-migration-scripts.jar.

Учтите, что преобразование больших репозиториев может занять много времени, даже когда клонирование выполняется из локального репозитория SVN. К примеру, преобразование репозитория размером 400 МБ с 33 000 коммитов в главной ветке займет около 12 часов.

При умеренном размере репозиториев необходимо выполнить следующие действия на локальном компьютере руководителя процесса перехода. Если репозиторий SVN очень большой и вы хотите сократить время конвертации, можно запустить клон git svn на сервере SVN вместо того, чтобы делать это на локальной машине руководителя перехода. Это позволит избежать затраты ресурсов при клонировании по сетевому соединению.


Клонирование репозитория SVN


Команда клонирования git svn трансформирует ствол, ветви и тэги в репозитории SVN в новый репозиторий Git. В зависимости от структуры репозитория SVN, команды конфигурируются по-разному.

Переход к Git: команда клонирования git svn
базы данных
Связанные материалы

Перемещение полного репозитория Git

Логотип Bitbucket
СМ. РЕШЕНИЕ

Изучите Git с помощью Bitbucket Cloud

Стандартная структура SVN

Если в вашем проекте SVN используется стандартная структура каталога /ствол, /ветвии /тэги, можете использовать опцию --stdlayout вместо того, чтобы вручную указывать структуру репозитория. Выполните следующую команду в каталоге ~/GitMigration:

git svn clone --stdlayout --authors-file=authors.txt
 <svn-repo>/<project> <git-repo-name>

Здесь <svn-repo> — это URI репозитория SVN, перенос которого вы выполняете, <project> — имя проекта, который вы желаете импортировать, а <git-repo-name> — имя каталога нового репозитория Git.

Например, если вы выполняете переход проекта под именем Confluence,размещенного на https://svn.atlassian.com, можно запустить следующую команду:

git svn clone --stdlayout --authors-file=authors.txt https://svn.atlassian.com/Confluence ConfluenceAsGit

Нестандартная структура SVN

Если репозиторий SVN имеет нестандартную структуру, необходимо указать расположение ствола, ветвей и тэгов, используя опции командной строки--ствол ,--ветви , --тэги. Например, если ветви сохранены в директориях /branches и /bugfixes, необходимо использовать команду:

git svn clone --trunk=/trunk --branches=/branches 
 --branches=/bugfixes --tags=/tags --authors-file=authors.txt 
 <svn-repo>/<project> <git-repo-name>

Проверка нового репозитория Git


После выполнения команды git svn clone (это может занять некоторое время) в каталоге ~/GitMigration появится новый каталог с именем . Это преобразованный репозиторий Git. Вы сможете переключаться на репозиторий и выполнять любые стандартные команды Git, чтобы изучить проект.

Ветви и тэги не импортируются в новый репозиторий Git, как можно было ожидать. Вы не найдете ветвей SVN на выходе ветвей git, также как и тэгов SVN на выходе тэгов git tag . Но если вы запустите git branch -r,вы сможете найти все ветви и тэги из репозитория SVN. Команда git svn clone импортирует ветви SVN как удаленные ветви и импортирует тэги SVN как удаленные ветви с префиксами tags/.

Переход к Git: структура клонированного репозитория Git

Это упрощает двухстороннюю синхронизацию, но односторонний переход к Git довольно сложный. Поэтому следующий шаг — преобразование удаленных ветвей в местные ветви и актуальные тэги Git.

Очистка нового репозитория Git


Скрипт clean-git, включенный в файл svn-migration-scripts.jar, преобразовывает ветви SVN в локальные ветви Git, а тэги SVN — в развернутые тэги Git. Учтите, что эта операция разрушает данные, и вы не сможете вернуть операции подтверждения из репозитория Git обратно в репозиторий SVN.

Если вы следуете данному руководству по выполнению перехода, то подобной проблемы у вас не возникнет, т.к. руководство рекомендует осуществлять одностороннюю синхронизацию от SVN к Git (репозиторий Git рассматривается "только для чтения", пока не завершен этап "Переход") . Но если вы планируете размещение в репозитории Git и репозитории SVN во время процесса перехода, вам не следует выполнять следующие команды. Это дополнительная задача, которая не рекомендуется для типичного проекта.

Чтобы посмотреть, что можно очистить, запустите следующую команду в ~/GitMigration/:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git

Будут представлены все изменения, которые хочет выполнить скрипт, но фактически он их не выполнит. Чтобы применить эти изменения, необходимо использовать опцию --force :

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force

Сейчас вы должны увидеть все ветви SVN в выводе ветвей git, а также тэги SVN в выводе тэгов git . Это означает, что вы успешно конвертировали проект SVN в репозиторий Git.

Резюме


На этом этапе вы преобразовали репозиторий SVN в новый репозиторий Git с помощью команды git svn clone, а затем очистили структуру полученного репозитория, используя файл svn-migration-scripts.jar. На следующем этапе вы узнаете, как синхронизировать новый репозиторий Git с новыми операциями размещения в репозиторий SVN. Этот процесс похож на процесс преобразования, но включает в себя несколько важных рекомендаций по рабочему процессу в этот переходный период.


Поделитесь этой статьей
Следующая тема

Рекомендуемые статьи

Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.

Люди сотрудничают друг с другом, используя стену со множеством инструментов

Блог Bitbucket

Рисунок: DevOps

Образовательные программы DevOps

Демонстрация функций в демо-зале с участием экспертов Atlassian

Как инструмент Bitbucket Cloud работает с Atlassian Open DevOps

Подпишитесь на информационную рассылку по DevOps

Thank you for signing up