203 votes

Existe-t-il un hook git pour pull ?

J'ai besoin d'effectuer certaines actions (préparer des fichiers de messages gettext *.mo) sur mon projet à chaque fois que je lance l'application git pull . Existe-t-il un hook git approprié que je pourrais utiliser à cette fin ?

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.

228voto

Jefromi Points 127932

El githooks est une liste complète des hooks. S'il n'y figure pas, il n'existe pas.

Cela dit, il y a est a crochet post-fusion et tous les pulls incluent une fusion, bien que toutes les fusions ne soient pas des pulls. Il est exécuté après les fusions, et ne peut pas en affecter le résultat. Elle n'est jamais exécutée s'il y a eu des conflits ; vous devriez le faire avec le hook post-commit si cela est vraiment important, ou l'invoquer manuellement.

0 votes

Merci Jefromi, il semble que la post-fusion soit ce que je recherche.

48 votes

@Jefromi "all pulls include a merge", même si je fais un pull --rebase ?

1 votes

Mise à jour de la page de manuel de githook, le lien précédent ne semble pas fonctionner : manpagez.com/man/5/githooks

20voto

Snow Crash Points 6429

post-merge - voir https://git-scm.com/docs/githooks#_post_merge pour plus de détails sur la façon de l'utiliser.

3voto

Willis Points 293

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X