Если ваш макет хранилища SVN:
svnroot/
|-- projectA
| |-- branches
| |-- tags
| `-- trunk
|-- projectB
| |-- branches
| |-- tags
| `-- trunk
`-- projectC
|-- branches
|-- tags
`-- trunk
Тогда вы можете создать отдельные репозитории git для каждого проекта, например, projectA
:
$ git svn clone --stdlayout https://svn.example.net/svnroot/projectA
После этого вы можете создать основное git-репо (git init
) и добавить созданные git-репо для project{A,B,C}
в качестве подмодулей к нему (git submodule
).
Но это, вероятно, не то, что вы хотите; из git submodule
руководства:
Подмодули допускают зарубежные репозитории
быть встроенным в выделенный
подкаталог исходного дерева,
всегда указывает на конкретный коммит.
Их не следует путать с пультами дистанционного управления, которые в основном предназначены
для филиалов одного и того же проекта; субмодули предназначены для разных
проекты, которые вы хотели бы сделать частью вашего исходного дерева, а история
два проекта по-прежнему остаются полностью независимыми, и вы не можете
изменить содержимое подмодуля из основного проекта.
Если вы хотите изменить project{A,B,C}
из основного проекта и сохранить историю проектов, то подмодули не подходят для этой задачи.
Для предоставленного макета SVN репо:
svnroot/
|-- branches
|-- tags
|-- trunk
|-- projectA
|-- projectB
`-- projectC
попробуйте создать репозитории git, используя аргументы --trunk
, --branches
, --tags
, например:
$ git svn clone \
> --trunk trunk/projectA \
> --branches branches \
> --tags tags \
> https://svn.example.net/svnroot \
> projectA
По завершении файл .git/config
должен содержать что-то вроде:
[svn-remote "svn"]
url = https://svn.example.net/svnroot
fetch = projectA/trunk:refs/remotes/trunk
branches = branches/*:refs/remotes/*
tags = tags/*:refs/remotes/tags/*
Вы можете использовать --ignore-paths=<regex>
, чтобы пропустить соответствующие пути из проекта.