#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)