Установить подмодуль Git для мелкого клона и разреженной проверки? - PullRequest
17 голосов
/ 04 июня 2011

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

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

  1. Разреженная проверка: только проверять определенные файлы субмодуля.
  2. Мелкий клон: клонировать только определенный SHA1 подмодуля.

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

Ответы [ 3 ]

15 голосов
/ 02 августа 2012

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

13 голосов
/ 17 июля 2013

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

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

См. commit 6cb5728c43f34a7348e128b44b80d00b9417cb19 :

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

Подписано: Chris Packham <judge.packham@gmail.com>

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


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

С Git 2.10 (3 квартал 2016 г.),вы сможете сделать

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

См. " Подмодуль Git без лишнего веса " для получения дополнительной информации.

5 голосов
/ 05 июня 2011

Подмодули не могут делать часть репо. Вы должны проверить объединение поддеревьев вместо.

...