C'est très bizarre mais lors de la configuration d'un référentiel git et de la création d'un hook post-réception avec:
echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"
le hook fonctionne en effet, mais il n'arrive jamais à exécuter correctement git pull:
6bfa32c..71c3d2a master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--
donc je me demande maintenant, comment est-il possible de faire le crochet mettre à jour le clone avec post-recevoir?
dans ce cas, l'utilisateur exécutant les processus est le même, et tout est dans le dossier utilisateur, donc je ne comprends vraiment pas ... parce que si si j'entre manuellement dans
cd ~/websites/testing
git pull
ça marche sans aucun problème ...
toute aide à ce sujet serait très appréciée
Merci beaucoup
Une chose que j'ai vécue était que l'utilisation du
post-update
crochet '--git-dir' fonctionnait très bien mais git se plaignait toujours d'un arbre de travail manquant (malgré l'utilisation de '--work-tree')En bref, cela n'a pas fonctionné:
git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull
alors que cela a fonctionné:
cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull
la source
Ça ne marche pas?
Édité
Mieux encore
la source
Avez-vous essayé avec le chemin complet au lieu de ~?
la source
Le script est probablement invoqué avec
/bin/sh
, ce qui ne comprend pas~
. Essayez-le avec le chemin d'accès complet à la~
place.la source
La première réponse recommandée est correcte - lorsqu'un crochet est en cours d'exécution, GIT_DIR, etc. sont définis. Cependant, si vous souhaitez pouvoir utiliser le script dans un autre référentiel, cette méthode est défectueuse car elle code dur en réinitialisant le GIT_DIR. Comme ils l'ont laissé entendre, l'autre façon consiste à supprimer la variable en utilisant env comme suit: env -i git reset --hard Évidemment, quelle commande vous exécutez dépend de vous - c'est juste le bit 'env -i' qui est le bit important .
la source