Кто-нибудь использует новую функцию git super/subproject в реальных проектах? Насколько хорошо это работает? Например, я понимаю, что если я нажимаю на подпроект, мне приходится вручную перехватывать суперпроекты (возможно, используя подпроект hook, но тем не менее)?
Кто-нибудь действительно использует git супер/подпроекты?
Ответ 1
Используя подмодуль, вы определяете в своей рабочей области Git (что означает ваш репозиторий "суперпроект" Git) конфигурация.
Под "конфигурацией" я имею в виду "список тегов или SHA-1 node, необходимых для работы в вашей рабочей области".
(и по работе я имею в виду любые "усилия по развитию", которые вы делаете в своей рабочей области: классическая компиляция или патч, или слияние, или развертывание, или...).
Это тот случай, когда вы клонируете суперпроект и "git update
" ваши подмодули: вы проверяете точные репозитории SHA1, которые ранее были зафиксированы в суперпроекте (записано как gitlink в индексе).
Другой режим - это когда вы работаете над своим суперпроектом и одним или несколькими подмодулями.
Это означает, что для заданных подмодулей вы проверили определенную ветку (вы больше не используете отдельный HEAD для содержимого этих подмодулей, а скорее указатель на кончик ветки).
Затем "подталкивание подмодуля" означает обновление удаленного репозитория, содержащего этот подмодуль (и только тот).
Фактический трюк в этом последнем сценарии (который может заслужить вас, если вы захотите), когда вы нажимаете суперпроект: вы должны быть уверены, что сначала подтолкнули все свои подмодули.
Всегда публиковать изменение подмодуля перед публикацией изменений в суперпроекте, который ссылается на него. Если вы забудете опубликовать изменение подмодуля, другие не смогут клонировать репозиторий (суперпроекта)
Не забывайте, что может настроить подмодуль для перехода к ветке.
Ответ 2
FWIW, мы пытаемся сделать скачок до git, а наш проект (bitweaver, система управления контентом) высокомодульная система с около 160 репозиториев). "Сборка" обычно содержит две дюжины или более субрепозиторий. Мы использовали "виртуальные модули" в CVS, и это сработало для нас фантастически, однако у CVS есть свои ограничения для выполнения коммитов.
ПодмодулиGit имеют некоторые серьезные ограничения, и вы должны определенно оценить меркурийную реализацию, поскольку она является, безусловно, более дружественной и гибкой для внешних/модульных проектов (то есть она поддерживает другие системы VCS, даже HgGit).
Вот самые большие проблемы:
-
Каждый подмодуль жестко связан с конкретная фиксация при добавлении "git subodule add" в супер-репозиторий. Это по дизайна и искали в качестве выгоды git, поэтому я не ожидал, что он скоро изменится. Это болезненно в такая система, как наша, где commit всегда происходят в подмодули. Вы должны обновить супер-проект, чтобы поддерживать или обновлять ваши субрепозиции будут выполняться после первоначальное обновление подмодуля. (видеть supergit ниже для нашего решения).
-
Вы не можете легко совершить и нажать все суб-репо из корня. Это также очень раздражает, см. supergit ниже.
-
Различные gotchas, которые могут быть мучительными, особенно вещи, которые "молча перезаписывают изменения".
supergit
Мы написали shell script вызов supergit, который обрабатывает некоторые из болезненностей. Он выполняет клонирование, подмодуль init, update и контрольный мастер всего одним махом. Он также будет выполнять команды git для всех каталогов в супер-репо отдельно (массовая обработка git видов).
HTH, удачи.
Ответ 3
Если вы имеете в виду подмодули, то, конечно же.
Подмодули не знают и не должны знать везде, где они используются. Например, у меня есть один подмодуль, который используется в нескольких проектах, которые я знаю (и, возможно, несколько, которых у меня нет).
Нажатие на подмодуль никоим образом не влияет на версию кода, используемую проектом, содержащим подмодуль, поэтому я не уверен, что вы хотите, чтобы крюк делал все равно.