Git - hook post-réception avec git pull "Impossible de trouver un répertoire git valide"

17

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

zanona
la source

Réponses:

25

Pendant l'exécution du hook GIT_DIRet (si l'arborescence a été définie explicitement) GIT_WORK_TREEsont définies. Cela signifie que votre pull ne s'exécutera pas avec le deuxième référentiel du répertoire dans lequel vous avez changé.

Essayez git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; ou désactivez l'environnement repo-local de git avec ceci:

unset $(git rev-parse --local-env-vars)

Plus d'informations sur ces variables d'environnement dans man 1 git .

Tobu
la source
1
Merci beaucoup pour ce Tobu, ça marche vraiment, je vais vérifier plus d'informations à ce sujet aussi. Cheers
zanona
6

Une chose que j'ai vécue était que l'utilisation du post-updatecrochet '--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
1

Ça ne marche pas?

cd /home/smb/websites/testing
env -i git pull

Édité

Mieux encore

cd /home/smb/websites/testing
unset GIT_DIR
git pull
tommasop
la source
0

Avez-vous essayé avec le chemin complet au lieu de ~?

cd /home/smb/websites/testing
git pull
soie
la source
0

Le script est probablement invoqué avec /bin/sh, ce qui ne comprend pas ~. Essayez-le avec le chemin d'accès complet à la ~place.

Darren Chamberlain
la source
0

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