Вы смотрели на подмодули git ?
Я использую их для этой задачи. У нас есть хранилище вспомогательных классов. Однако всякий раз, когда мы вносим дополнения и улучшения, мы хотим, чтобы эти улучшения каскадировались во всех наших проектах, поэтому мы настраиваем этот вспомогательный репозиторий как подмодуль в каждом репозитории проектов.
Попробуйте выполнить следующую команду из корневого каталога вашего репозитория:
git submodule add ssh://url/to/external/library.git local/path
Для этого необходимо выполнить следующие шаги (дословно взято из приведенного выше URL):
- Клонирует подмодуль в текущем каталоге и по умолчанию извлекает основную ветвь.
- Добавляет путь клона подмодуля в файл
.gitmodules
и добавляет
этот файл в индексе готов к фиксации.
- Добавляет текущий идентификатор фиксации подмодуля в индекс, готовый к фиксации.
Затем вы можете использовать
git submodule update
команда для обновления информации.
Кроме того, в качестве примечания, если вы делаете то, что я (например, вносите прямые изменения в репозиторий подмодуля), вам нужно перейти в корневой каталог репозитория подмодуля и зафиксировать эти изменения ПЕРВЫМ до принятия суперпроекта. Это связано с тем, что git отслеживает версии подмодулей (smart), поэтому, если вы сначала зафиксируете суперпроект, вы будете хранить ссылку на изменения, которые не были зафиксированы в хранилище подмодулей. Любой, кто попытается клонировать ваш суперпроект, получит ошибку.