Git svn clone, за исключением конкретной папки

Я хочу git клонировать репозиторий svn, за исключением одной папки в корневой папке svn.

Как мне это сделать?

Я мог бы сделать git svn clone svnrepo/dir/sb-dir/, если мне нужен только sb-dir, но мне нужны все папки (и файлы) в dir, кроме папки design

Ответ 1

Если вы используете последний Git1.7.0, он предлагает функцию разреженной проверки.

"редкая проверка" позволяет удалить только часть рабочего дерева.

Подробнее см. Git Вопрос о разрешении SO > : вам все равно нужно клонировать все репо, но вы можете проверить (т.е. заполнить свое рабочее дерево) только части клонированного репо)


Единственный другой способ - преобразовать design в качестве подмодуля. Поскольку книга GitPro упоминает:

Git поддержка подмодулей позволяет репозиторию содержать в качестве подкаталога проверку внешнего проекта.
Субмодули сохраняют свою личность; поддержка подмодуля просто хранит местоположение репозитория подмодуля и идентификатор фиксации, поэтому другие разработчики, которые клонируют содержащий проект ( "суперпроект" ), могут легко клонировать все подмодули при той же ревизии.
Возможны частичные проверки суперпроекта: вы можете сказать Git клонировать ни одного, некоторые или все подмодули.

Субмодуль - единственный способ, которым я знаю, добиться "частичного клонирования", так как в вашем случае это клонирующая часть, которая является проблематичной.
Из ваших комментариев:

Моя проблема в том, что папка с дизайном составляет около 700 МБ; и требуется несколько часов до Git svn clone. Вся остальная часть проекта, собранная вместе, находится в 10 мб.

Но это означает модификацию SVN-репо, чтобы изолировать design как "внешнюю" ссылку, затем git svn clone и добавить в клонированный Git репо ссылку подмодуля.

Ответ 2

Вы можете использовать параметр --ignore-paths=<regex> для git svn init или git svn fetch, или добавить опцию конфигурации svn-remote.<name>.ignore-paths в .git/config. Это задокументировано как "Это позволяет указать регулярное выражение Perl, которое будет вызывать пропуск всех подходящих путей из извлечения из SVN". Ищите в руководстве "ignore-paths" для более подробной информации.

После попытки эксперимента в этом ответе я узнал, что регулярное выражение применяется к полному пути каждого каталога или файла из корня хранилища. Поэтому, если у вас стандартная структура хранилища и вы хотите исключить одно и то же из каждого ствола/ветки/тега, вы можете использовать регулярное выражение, например ^(trunk|((branches|tags)/[^/]+))/(<file-to-ignore>|<other-file-to-ignore>)(/|$).