Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

    http://www.gitorious.org/svn2git

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

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

  • Получить локальную копию вашего репозитория 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 ..
    
  • создать идентификационную карту между svn-коммиттерами и GIT коммиттерами

    file: account-map

    svnname1 Jane Coder <[email protected]>
    svnname2 Joe Techwriter <[email protected]>
    
  • Создайте правила фильтрации svn2git для захвата истории utahrle. Я опубликую здесь полный пример utahrle, который показывает, как следить за историей вокруг разных каталогов, но Я ожидал бы, что большинство случаев будет не так уж плохо:

    file: rules

    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
    
  • Запустите svn-all-fast-export для создания архива (svn_repo - это каталог, содержащий полная копия файлов subversion):

    svn-all-fast-export -identity-map account-map -rules rules svn_repo

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

Ответ 3

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

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

Ответ 4

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