Перехват GIT после получения не проверяет подмодули

#git #kohana-3

#git #kohana-3

Вопрос:

Я работал над проектом 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
  

Комментарии:

1. На всякий случай, локально все работает нормально. Я просто хочу, чтобы в удаленной веб-папке было все, что у меня есть локально

2. да, я смог воспроизвести вашу проблему. Смотрите мой обновленный ответ с полным перехватом после получения.

Ответ №1:

Вы должны добавить следующее (соответствующим образом используя переменную среды 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. да, я пробовал это, но это не работает в папке project.git и не работает в папке public_html. Добавлять ли это в сам файл перехвата?

2. @Jay8100 Да, добавьте сам перехват.

3. @Jay8100 — да, я смог воспроизвести вашу проблему. Смотрите мой обновленный ответ с полным перехватом после получения.

4. Ах, значит, все, что потребовалось, это создать временную папку для клонирования репозитория! Спасибо!

5. Это делает операцию отправки ужасно медленной.

Ответ №2:

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

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