На git pull hook ничего не происходит (после обновления) - PullRequest
0 голосов
/ 14 декабря 2018

когда я делаю git pull на живом сервере, я захожу в систему как пользователь root, и поэтому все измененные или новые файлы пользователя и группы устанавливаются на root:root.

Я пробовал эту настройкув моем файле post-update hook:

OWNER="example:example"
REPO_PATH="/home/example/public_html"

cd $REPO_PATH || exit
unset GIT_DIR
FILES="$(git diff-tree -r --name-only --no-commit-id)"
git merge FETCH_HEAD

for file in $FILES
    do 
    chown $OWNER $file
done

exec git update-server-info

Когда я запускаю git pull, он просто ничего не делает.

1 Ответ

0 голосов
/ 14 декабря 2018

Запуск git pull не вызывает ловушку после обновления: git pull - это git fetch, за которым следует либо git rebase или git merge, более или менее, и перебазирование фактически заканчивается на git checkout, пока объединение, ну, слить.(Для так называемых fast-forward слияний git merge делает что-то гораздо более похожее на git checkout внутри, но также обновляет текущее имя ветви.) Таким образом, эти два крючка являются гораздо более подходящими кандидатами для этого

Git включает contrib/hooks/setgitperms.perl пример сценария , который предназначен для использования в post-checkout и post-merge ловушках.

(Стоит также упомянутьчто запуск git pull на работающем сервере не обязательно является хорошей стратегией развертывания. Сам Git не является системой развертывания, и ни push-to-deploy, ни pull-to-deploy сами по себе не подходят для многих реальных установок.может работать для ограниченных подмножеств, но в общем, подумайте о создании или использовании реальной системы развертывания.)

...