2010-11-27 32 views
1

Ma structure de répertoire est:Comment utiliser correctement le crochet après réception?

~/parent.git/.git/crochets/post-réception

Le post-recevoir crochet ressemble:

#!/bin/sh 
git checkout -f 

Lorsque je pousse dans parent. git, le script ne fonctionne pas. Je n'arrive pas à comprendre le problème, car tout sur Internet me dit que cela devrait fonctionner.

J'ai chmod'd post-recevoir, donc je sais que ce n'est pas le problème. Toute aide est très appréciée.

+0

Si vous essayez d'actualiser les fichiers extraits après avoir poussé vers un référentiel non nu, consultez la section ["Pourquoi ne verrons-je pas les modifications dans le dépôt distant après" git push "?"] (Https: // git.wiki.kernel.org/index.php/GitFaq#Why_won.27t_I_see_changes_in_the_remote_repo_after_.22git_push.22.3F) dans la FAQ Git. Il recommande un script beaucoup plus sûr [post-update] (http://utsl.gen.nz/git/post-update). Le problème est probablement dû au fait que cwd est le répertoire du référentiel lui-même et que GIT_DIR est défini sur le même chemin. Probablement lié: [SO question 5531309] (http://stackoverflow.com/q/5531309/193688). –

Répondre

1

Si j'avais une supposition, je dirais que l'utilisateur qui pousse n'est pas autorisé à effectuer la vérification dans ce répertoire. Ce que je vous suggère de faire est de construire le script de travail minimal et de construire à partir de là. IE, au lieu de:

git checkout -f 

Do:

echo "Got here" > /tmp/git_push_log 

essayer ensuite:

echo "Got here" > pwd_test 

Pour vérifier vos hypothèses sur ce répertoire ce fonctionne et quelles autorisations sont nécessaires.

2

Comme mentionné Chris vous semblez avoir le même problème que reset hard on git push

crochets spécifiquement courir avec CWD et GIT_DIR ensemble dans le répertoire .git. Cela entraîne l'exécution de la commande checkout dans le répertoire .git et l'erreur normale à propos de ce remplacement.

Si vous faites un ls dans le répertoire distant .git, vous devriez trouver un contrôle complet là-dedans.

La meilleure façon de contourner cela est de spécifier GIT_WORK_TREE sur le devant de la commande de la caisse:

GIT_WORK_TREE=/my/git/checkout git checkout -f 

Le script Chris lié (http://utsl.gen.nz/git/post-update) est censé prendre soin de cela et quelques autres problèmes potentiels.

+0

Je ne sais pas comment c'est historiquement mais maintenant je l'ai essayé avec git 2.0.0 et au moins pré-commit fonctionne avec le 'CWD' réglé à repo root. – Ilkka