git svn clone кроме определенной папки - PullRequest
7 голосов
/ 03 марта 2010

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

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

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

Ответы [ 2 ]

3 голосов
/ 08 февраля 2015

Вы можете использовать опцию --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>)(/|$).

3 голосов
/ 03 марта 2010

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

Функция «разреженного извлечения» позволяет извлекать только часть рабочего дерева.

См. Git Sparse Checkout SO вопрос для получения дополнительной информации: вам все еще нужно клонировать репо all , но вы можете оформить заказ (т. Е. Заполнить ваше рабочее дерево) только частями клонированного Сделки рЕПО)


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

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

Подмодуль - единственный способ, которым я знаю, для достижения «частичного клонирования», поскольку в вашем случае проблематична часть клонирования. Из ваших комментариев:

моя проблема в том, что папка design составляет около 700 мб; и это занимает несколько часов, чтобы git SVN клон. Весь остальной проект вместе взятый находится в 10 с. Мб.

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

...