Cette approche fonctionne pour moi.
Tout d'abord, ajoutez un fichier nommé post-merge
a /path/to/your_project/.git/hooks/
cd /path/to/your_project/.git/hooks/
touch post-merge
Ensuite, changez son propriétaire pour qu'il soit le même que celui du dossier <votre_projet> (c'est le même que celui du dossier <votre_projet>). nginx
y php-fpm
runner), dans mon cas, j'utilise www:www
sudo chown www:www post-merge
Ensuite, changez son mode de fichier en 775 (il peut alors être exécuté).
sudo chmod 775 post-merge
Ensuite, mettez le snippet ci-dessous dans post-merge
. Pour comprendre le snippet, voir aquí (en fait, c'est moi).
#!/bin/sh
# default owner user
OWNER="www:www"
# changed file permission
PERMISSION="664"
# web repository directory
REPO_DIR="/www/wwwroot/your_project/"
# remote repository
REMOTE_REPO="origin"
# public branch of the remote repository
REMOTE_REPO_BRANCH="master"
cd $REPO_DIR || exit
unset GIT_DIR
files="$(git diff-tree -r --name-only --no-commit-id HEAD@{1} HEAD)"
for file in $files
do
sudo chown $OWNER $file
sudo chmod $PERMISSION $file
done
exec git-update-server-info
Tout est fait, maintenant, retournez dans le dossier de votre_projet
cd /path/to/your_project/
exécuter git pull
sous votre dossier_projet, rappelez-vous que vous devez exécuter en tant que Root ou sudo(je me souviens de sudo)
sudo git pull
Maintenant, vérifiez le nouveau fichier qui a été tiré du dépôt distant, voyez si sa propriété a été changée en www:www
(si tout s'est passé comme prévu, la propriété du nouveau fichier tiré devrait être changée en www:www
).
Cette approche est bien meilleure que sudo chown -R www:www /www/wwwroot/your_project/
parce qu'il ne change que la propriété du nouveau fichier, pas de tous les autres ! Disons que j'ai juste tiré 2 nouveaux fichiers, si vous changez la propriété de tout le dossier, cela coûte plus de temps et de ressources serveur (utilisation du processeur, utilisation de la mémoire...), c'est totalement inutile.
18 votes
@Alan : Ce n'est certainement pas un doublon. Cette question concerne un crochet sur le local côté, où vous exécutez
git pull
. Celui que vous avez lié concerne le déclenchement d'un crochet sur le à distance quand quelqu'un tire dessus. (Et c'est une question très étrange - elle implique qu'ils utilisent un repo central non dénudé...)2 votes
@Alan : C'est assez facile à manquer si vous étiez en train d'écumer - j'espère que je n'ai pas été trop dur. J'espère que je n'ai pas été trop sévère. Je suis juste paranoïaque à l'idée que des questions soient incorrectement fermées, puisque les votes de réouverture prennent beaucoup plus de temps à s'accumuler.
1 votes
Jefromi : Tu as tout à fait raison. Il ne faut pas s'inquiéter. J'étais juste triste d'avoir écrémé et initié la fermeture.