GIT post-receive hook не проверяет подмодули - PullRequest
3 голосов
/ 08 июня 2011

Я работал над проектом Kohana 3, который я установил, используя загруженный zip-файл некоторое время назад. У меня есть git-репозиторий на моем удаленном сервере "project.git", который проверяет последние коммиты в рабочем каталоге "public_html", где я тестирую приложение

Мой файл перехвата после получения

GIT_WORK_TREE=/var/www/public_html;
git checkout -f;

, которая работала в течение нескольких месяцев, пока я не решил удалить некоторые папки Kohana и использовать вместо этого подмодуль git, чтобы я мог делать обновления через git.

Теперь проблема в том, что субмодули не находятся в рабочем каталоге. Я попытался зайти туда, чтобы добавить подмодули, но каталог public_html не является хранилищем. В каталоге «project.git» команды git выдают ошибку, которую я должен выполнить в рабочем каталоге.

Как мне изменить мой хук, чтобы оформить подмодули, когда я делаю коммит?

Обновление

Согласно предложению @ manojlds: Я добавил это к крючку, и теперь это выглядит так:

GIT_WORK_TREE=/var/www/public_html;
git submodule init;
git submodule update; 
git checkout -f;

Но я получаю это сообщение,

remote: You need to run this command from the Top level of the working tree

и никаких изменений в подмодулях в

public_html

Ответы [ 2 ]

5 голосов
/ 08 июня 2011

Необходимо добавить следующее (соответственно, используя переменную среды GIT_WORK_TREE):

git submodule init
git submodule update

, чтобы вы могли получить содержимое подмодулей на удаленном сервере и затем скопировать их в public_html

Ниже приведен полный хук после получения (модифицированный для поддержки правильного функционирования подмодулей):

#!/bin/sh
unset GIT_DIR
git clone /path/to/repo /tmp/public_html
cd /tmp/public_html
git submodule init
git submodule update
cp -R /tmp/public_html /var/www/
rm -rf /tmp/public_html
rm -rf /var/www/public_html/.git
1 голос
/ 06 ноября 2013

Это мой хук после получения: замените WORK_DIR на место, где вы хотите оформить заказ.Это основной веб-каталог в моем случае.Он инициализируется как репозиторий git и просто извлекает из репозитория git bare, в котором работает этот перехватчик. Это решает как скорость извлечения (git намного быстрее извлекает, чем cp -R из другого ответа), так и поддерживает правильную синхронизацию подмодулей.

#!/bin/sh
unset GIT_DIR
echo "Checking out"
(cd $WORK_DIR && git pull --recurse-submodules=yes --force)
echo "Submodule update..."
(cd $WORK_DIR && git --work-tree="$WORK_DIR" submodule update --init --recursive --force)
...