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