В ситуациях, когда вам нужно Git-репо внутри Git-репо, вы должны рассмотреть Git submodules .Подмодули Git обеспечивают возможность включения отдельного репозитория Git в ваш собственный и управления тем, какая версия находится в вашей базе кода.
Основной рабочий процесс выглядит следующим образом:
- Внутри вашего«родительский» проект, добавьте любые другие репозитории, которые вы хотите, с помощью команды
git submodule add
.Например, git submodule add <a href="https://github.com/jtauber/django-mailer.git" rel="nofollow">https://github.com/jtauber/django-mailer.git</a>
поместит папку django-mailer
в ваш проект;при желании вы можете указать альтернативное имя, как вы делаете с git clone
. - Это автоматически клонирует репо и по умолчанию извлекает его основную ветвь.Он также добавляет эту информацию в индекс вашего репозитория Git, так что вы увидите, если вы запустите
git status
, что вам есть что зафиксировать. - В вашем «родительском» проекте (не внутри подмодуля), запустите
git commit -m "Your message"
чтобы совершить то, что вы сделали.
Позже, если вам нужно обновить подмодуль (git-репо в вашем git-репо), перейдите к нему напрямую и выполните стандартный git pull origin master
,Если есть обновления, вернитесь в ваш родительский проект, выполните стандартные git add
и git commit
, чтобы зафиксировать тот факт, что ваш репо зависит от более новой версии подмодуля.
Теперь, если вы позжеклонировать ваш проект где-то еще, по умолчанию подмодули не будут одновременно обрабатывать свой код;ваш родительский проект просто хранит те коммиты, в которых должны быть ваши подмодули, а не их реальный код.В этой ситуации вам нужно инициализировать, а затем обновить ваши подмодули с помощью следующих команд:
git submodule init
git submodule update
Теперь ваши подмодули также должны иметь свой код.
Все это подробно описано в Git Community Book .На Blip.tv также есть хорошее видео, показывающее рабочий процесс подмодуля git.