Миграция мультипроектного репозитория Subversion с общим транком в Git? - PullRequest
5 голосов
/ 10 марта 2011

Я начал использовать Git в прошлом году, и мне так понравилось, что я подумываю над тем, чтобы переключиться на мое самое большое и самое активное хранилище Subversion.К сожалению, это репо содержит несколько (связанных, но независимых) проектов.

Существует множество страниц, описывающих, как конвертировать репроект с одним проектом, но гораздо меньше для репо с несколькими проектами.Фактически, я только нашел a несколько , и все они, похоже, предполагают, что у каждого проекта есть свой ствол:

project1/
    branches/
    tags/
    trunk/
project2/
    branches/
    tags/
    trunk/
project3/
    branches/
    tags/
    trunk/

К сожалению, my Репозиторий Subversion выглядит примерно так:

branches/
    *empty*
tags/
    project1-0.9/
    project1-1.0/
    project1-1.0.1/
    project2-0.9/
    project2-0.9.1/
    project3-0.5/
trunk/
    project1/
    project2/
    project3/

Хуже того, все теги создаются из рабочей копии (например, svn copy . svn://example.com/svn/tags/project1-1.0.2), поэтому включают небольшие изменения, которые никогда не передаются в ствол (в основномжестко запрограммированные номера версий).Кроме того, есть несколько коммитов, которые охватывают все проекты (обновления лицензий и т. Д.).К счастью, по крайней мере, нет слияний!

Есть ли чистый способ распутать эти проекты, сохранив мои теги?Если это поможет, это будет одностороннее преобразование, после которого репозиторий Subversion будет отключен.

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Я использовал http://gitorious.org/svn2git/svn2git, чтобы сделать то же самое.Первоначально этот инструмент был создан для преобразования огромного SVN-репозитория KDE в Git, который, кстати, также является вашим репозиторием.Все, что вам нужно сделать, это написать простой управляющий файл, описывающий, какие каталоги соответствуют какому проекту и ветке.В конце у вас есть хороший набор репозиториев git для ваших проектов.

Одно замечание: прямой поддержки тегов SVN нет.Вам придется импортировать их как ветки Git и постобработать, ср.http://gitorious.org/svn2git/svn2git/blobs/master/samples/merged-branches-tags.rules.

0 голосов
/ 10 марта 2011

http://repo.or.cz/w/svn-all-fast-export.git, кажется, требует обширных файлов правил, которые могут разобраться в вашем хранилище. Используя git-svn (двунаправленно), я знаю, что вы можете без проблем вырезать существенные части репозитория SVN (включая игнорирование частей коммита из-за того, что корень SVN указывает глубоко в репозиторий или через --ignore-paths).

После создания нового репо вы можете использовать git-submodule, чтобы связать спину, если есть перекрестные ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...