Подтвердить что ты не робот

Кто-нибудь действительно использует git супер/подпроекты?

Кто-нибудь использует новую функцию git super/subproject в реальных проектах? Насколько хорошо это работает? Например, я понимаю, что если я нажимаю на подпроект, мне приходится вручную перехватывать суперпроекты (возможно, используя подпроект hook, но тем не менее)?

4b9b3361

Ответ 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

Если вы имеете в виду подмодули, то, конечно же.

Подмодули не знают и не должны знать везде, где они используются. Например, у меня есть один подмодуль, который используется в нескольких проектах, которые я знаю (и, возможно, несколько, которых у меня нет).

Нажатие на подмодуль никоим образом не влияет на версию кода, используемую проектом, содержащим подмодуль, поэтому я не уверен, что вы хотите, чтобы крюк делал все равно.