Конвертировать SVN-подкаталог в Git - PullRequest
25 голосов
/ 02 мая 2010

Я бы хотел отказаться от SVN для Git. Моя текущая настройка репозитория SVN имеет проекты в транке (/trunk/projecta, /trunk/projectb и т. Д. С тегами и ветвями в /tags/projecta-1.0 и т. Д.). Я хотел бы создать отдельные репозитории Git для каждого из этих проектов, извлекая их из SVN с помощью git-svn.

Я успешно перенес весь репозиторий SVN в локальное репозиторий Git, но все проекты теперь существуют в одном репозитории Git. Можно ли их развести на этом этапе?

Ответы [ 4 ]

18 голосов
/ 02 мая 2010

Это сложно. Например, чтобы получить теги для проекта, все его теги должны находиться в общем каталоге, но в вашей структуре все проекты имеют общий каталог тегов.

Возможно, вы могли бы переместить /tags/projecta-1.0 в /tags/projecta/1.0 и т. Д., А затем импортировать проекты в git по одному:

git-svn init --trunk=trunk/projecta --tags=tags/projecta ...

Я не знаю, будет ли это работать так, как ожидалось, поэтому пожалуйста сделайте это с копией вашего хранилища, а не с оригиналом!

4 голосов
/ 03 февраля 2013

Недавно мне пришлось решить эту проблему с достаточно сложным случаем (извлечение файлов utahrle из общей истории BRL-CAD для создания отдельного проекта GIT), и в итоге я использовал svn2git с файлом правил. Это были мои шаги - не уверен, что это «правильный» путь, но, похоже, в моем случае это удалось:

  1. Убедитесь, что svn2git установлен, а также Subversion и Git. (включите поддержку git subversion, если ее еще нет.) Примечание что существует несколько программ, использующих имя проекта svn2git - тот, который я использовал, это:

    http://www.gitorious.org/svn2git

    Эта статья из KDE заставила меня начать:

    http://techbase.kde.org/Projects/MoveToGit/UsingSvn2Git

  2. Получить локальную копию вашего хранилища SVN. Обратите внимание, что это это не извлечение хранилища, а полная копия весь набор данных репо SVN. Sourceforge делает это возможным с опцией rsync - подробности смотрите в их документации: http://sourceforge.net/p/forge/documentation/rsync%20Backups/. Я не уверен в других сайтах.

    mkdir svn_repo
    cd svn_repo
    rsync -av svn.code.sf.net::p/PROJECTNAME/MOUNTPOINT .
    cd ..
    
  3. создать карту идентификации между коммиттерами svn и коммиттерами git

    file: account-map

    svnname1 Jane Coder <coder@foo.org>
    svnname2 Joe Techwriter <writer@foo.org>
    
  4. создать правила фильтрации svn2git для захвата истории Utahrle. Я опубликую полный пример Utahrle здесь, который показывает, как следить за историей между различными каталогами, но Я ожидаю, что в большинстве случаев все будет не так плохо:

    файл: правила

    create repository utahrle
    end repository
    
    match /brlcad/trunk/libutahrle/
       min revision 1
       max revision 22796
       repository utahrle
       branch master
    end match
    
    match /brlcad/trunk/tools/
       min revision 1
       max revision 22814
       repository utahrle
       branch master
    end match
    
    match /brlcad/trunk/src/other/libutahrle/
       min revision 22797
       repository utahrle
       branch master
    end match
    
    match /brlcad/trunk/src/other/URToolkit/
       min revision 22815
       repository utahrle
       branch master
    end match
    
    match /
    end match
    
  5. Запустите svn-all-fast-export для создания архива (svn_repo - это каталог, содержащий Ваша полная копия файлов Subversion):

    svn-all-fast-export - account-map account-map - правила правил svn_repo

  6. Используя приведенный выше файл правил, utahrle хранит полученный git репозиторий. Используйте gitk, чтобы проверить, какую историю мы ожидаем увидеть на самом деле присутствует, то (если вы используете этот репо как онлайн исходный архив) используйте стандартные процедуры sourceforge для загрузки существующего репозитория git.

1 голос
/ 08 ноября 2011

Еще одна программа для одноразового преобразования хранилища Subversion - Svn2Git (отличается от ответа vdboor), она имеет меньше зависимостей и отлично справилась со своими репозиториями.

1 голос
/ 08 ноября 2011

Когда макет хранилища довольно сложный, существует инструмент под названием svn2git, который позволяет конвертировать сложный репозиторий с набором правил.

Вы можете скачать его здесь: http://gitorious.org/svn2git/ Программа должна быть скомпилирована, ей нужны заголовочные файлы Qt, Apache и SVN.

...