Установите подмодуль Git на мелкий клон и редкую проверку?

В большинстве вендоров Objective-C (например, facebook-ios-sdk) вы должны скопировать определенный подмножество своих файлов-репо/dirs в проект Xcode. Одна из проблем заключается в том, что вы не знаете, какая версия кода поставщика у вас есть. Другое дело, что если вы вносите изменения в код поставщика, вам нелегко внести свои изменения через Git.

В качестве решения я хочу добавить каждую библиотеку поставщиков в качестве подмодуля Git моего проекта репо с некоторыми дополнительными настройками (скажем, в файле .gitmodules). Таким образом, если другой человек клонирует мой проект и делает git submodule update --init, их репо и подмодули будут иметь такое же состояние, как мое, потому что они будут использовать те же настройки по умолчанию, что и я:

  • Редкая проверка: проверяйте только определенные файлы подмодуля.
  • Неглубокий клон: только клонировать определенный SHA1 подмодуля.

Как установить вышеуказанные настройки для подмодуля Git?

Ответ 1

Вы можете делать редкие проверки подмодулей так же, как нормальный разреженный контроль. Просто запомните, что файл sparse-checkout для каждого модуля находится в .git/modules/<mymodule>/info/. Но, как обсуждалось в git 1,7 редкой функции проверки, разреженные проверки - это именно то, что: checkouts. Вы не можете перемещать файлы или обмениваться настройками.

Ответ 2

С git1.8.4 (июль 2013 г.), в дополнение git мелкое обновление для subodule (git submodule update --depth 1), теперь у вас может быть пользовательское обновление:

В дополнение к выбору "rebase, merge или checkout-detach", "обновление подмодуля" может позволить использовать пользовательскую команду для обновления рабочего дерева подмодулей с помощью переменной конфигурации "submodule.*.update".

См. commit 6cb5728c43f34a7348e128b44b80d00b9417cb19:

Пользователи могут установить submodule.$name.update в '!command', что приведет к запуску 'command' вместо checkout/merge/rebase.
Это позволяет пользователю более тонко контролировать процесс обновления.

Подписано: Chris Packham <[email protected]>

Это означает, что вы можете использовать версию command, которую вы можете использовать для любого обновления подмодуля (через параметр submodule.$name.update).
Это script может сделать разреженный выезд, если вы хотите.


Обновление августа 2016 года (3 года спустя)

С git 2.10 (Q3 2016) вы сможете сделать

 git config -f .gitmodules submodule.<name>.shallow bool

Подробнее см. "Git подмодуль без лишнего веса".