Я работаю над проектом с открытым исходным кодом на GitHub.
У него есть подкаталог / Vendor, в котором имеется копия нескольких внешних библиотек. Оригинальный сопровождающий проекта время от времени обновлял этот каталог новой версией внешней библиотеки.
Один разработчик отправил мне запрос на удаление с идеей заменить эту копию на подмодуль git .
И я обдумываю, хорошая это идея или нет.
Git submodule Плюсы:
- Подмодули были специально разработаны для аналогичных сценариев
- Это исключает возможность случайной фиксации Vendor, которая будет перезаписана при следующем обновлении.
Подмодуль Git Минусы:
- Похоже, что подмодули git переносят сложность от сопровождающего к человеку, который будет клонировать / извлекать проект (после того, как вы клонируете, чтобы начать работу с проектом, требуются дополнительные шаги: «инициализация подмодуля git», «обновление подмодуля git»)
Каково ваше мнение по этому поводу?
Еще кое-что. Эта проблема - библиотека небольшого размера с очень ограниченными внешними зависимостями. Я думаю, что любой инструмент для сборки был бы излишним для этого сейчас.
git clone --recursive
а затем не нужно выполнять команды субмодуля. Никто другой не упомянул этот лакомый кусочек; большинство людей, которых я знаю, имеют субмодули, рекламируют это в README.Ответы:
Альтернативой субмодулю является использование
git subtree
. Это дает преимущества,git submodule
но без увеличения сложности для конечного пользователя. Сторонний репозиторий объединен с основным деревом проекта, но метаданные хранятся таким образом, что вы можете:Для пользователей Git, которые не достаточно опытны для понимания подмодулей, подход с поддеревьями делает получение клона вашего проекта не более трудным, чем любой другой клон. Короткая реклама из документации:
Я создал проект на работе с использованием подмодулей, и проблемы с поддержанием актуальности подмодулей в клонах каждого были слишком большой работой. Я недавно перешел на использование поддеревьев везде, и эти проблемы исчезли.
Обратите внимание, что git-subtree является частью
git/contrib
каталога и должен быть установлен отдельно.источник
Недостатком использования подмодулей является то, что tar-архивы или zip-архивы на Github (и многих других сервисах) не включают источники подмодулей. То есть архивы не являются автономными. Это проблема, если репозиторий небольшой и на самом деле не имеет сценария сборки, как статический HTML-сайт в зависимости от библиотеки JavaScript.
источник
Это идеальное место для использования подмодулей. Они уменьшают размер и сложность вашего хранилища и упрощают обновление внешних библиотек до новой версии.
Их нетрудно понять, как их использовать, и они довольно часто используются в этой ситуации, поэтому просто отметьте в README проекта, что вы используете субмодули и что делать, и люди должны иметь возможность понять это из. В первый раз, когда я столкнулся с репозиторием с подмодулем, я запустил его и запустил через 10-15 минут, и у меня никогда не возникало проблем с выяснением того, что делать с тех пор.
источник
Использование подмодулей не позволяет вам вносить локальные изменения в код и создает зависимость от внешнего репозитория. Если вы уверены, что никогда не захотите настраивать библиотеку или делать локальные исправления ошибок, и можете быть уверены, что внешний сервер всегда будет доступен, когда вы захотите клонировать новую копию - это путь.
Короче говоря - вы хотите просто использовать библиотеки или вы считаете их частью вашей кодовой базы? Если они не «ваш» код, почему они контролируют версию, а не просто что-то, что вам необходимо установить?
источник