Независимо от того, что вы решите сделать, вы можете немного автоматизировать его, используя git hooks . Хуки - это набор скриптов, которые git будет выполнять при определенных событиях. Соответствующим здесь является хук после обновления (в репозитории сервера). В обычном репо хуки находятся в .git/hooks
, поэтому в голом репо они находятся в hooks
. Этот каталог, вероятно, в настоящее время содержит множество примеров скриптов хуков (в последних версиях они называются *.sample
). Вам нужно будет создать файл с именем post-update
, содержащий все действия, которые вы хотите предпринять после отправки сервера (например, перейдите на другой репозиторий и выполните извлечение).
Что касается специфики вашего решения ... вы делаете правильные вещи, не нажимая на отмеченную ветку. Единственная возможная проблема с тем, что вы делаете, заключается в том, что сервер заканчивается дополнительной копией хранилища, используемой только для извлечения файлов. Если вы решите, что вам не нравится эта трата дискового пространства, я почти уверен, что это сделает то, что вы хотите:
git --work-tree=/path/to/checkout-dir --bare reset --hard
Это говорит git о необходимости вернуться в правильное состояние, используя указанный путь в качестве рабочего каталога, но имея в виду, что хранилище фактически пустое. Я лично такого раньше не делал, но, похоже, это работает на моем маленьком тесте!
Примечание: если вы решите, что все равно хотите сделать push-уведомление в извлеченную ветку (только если репо на сервере никогда не будет использовано ни для чего, кроме отправки и извлечения копии файлов) ... если вы абсолютно уверены в этом, вы можете установить для receive.denyCurrentBranch значение false в gitconfig сервера, выполнить git reset --hard
на сервере, принудительно переведя его рабочий каталог в состояние, в котором он должен быть.