84 votes

obtention de "fatal : not a git repository : '.'" lors de l'utilisation du hook post-update pour exécuter 'git pull' sur un autre repo

Je suis novice en matière de git, alors je m'excuse (et je vous prie de me corriger) si j'utilise mal la terminologie ici, mais je ferai de mon mieux.

J'essaie de mettre en place un repo git nu (hub) et une copie de travail de site de développement (prime) sur un serveur web. J'ai essayé de le modeler d'après cet article . Je veux que la copie de travail de développement soit mise à jour chaque fois que le repo du hub est poussé. J'ai l'impression que le crochet approprié pour cela est post-update que j'ai créé comme suit :

#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET

Mise à jour

Lorsque je pousse les changements de mon repo local vers le hub nu, j'obtiens la sortie suivante du post-update script :

remote: sites
remote: fatal: Not a git repository: '.'

Cependant, si je me connecte au serveur en tant qu'utilisateur 'sites' et que j'exécute ce script manuellement, cela fonctionne parfaitement. Des idées sur ce qui pourrait ne pas fonctionner avec ce crochet ou ce script ?

172voto

Ty W Points 3609

Voici le script qui a finalement fonctionné. Je pense que la partie qui manquait à l'origine et qui l'empêchait de fonctionner à distance était l'attribut unset GIT_DIR

#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch

exec git-update-server-info

28voto

Essayez plutôt :

#!/bin/sh
cd /path/to/working-copy/
env -i git pull

0voto

Zvika Naveh Points 1

Malgré cela unset GIT_DIR fonctionne.

le problème se produit lorsque vous définissez mal GIT_DIR à un autre endroit.

vous pouvez simplement ajouter cela à la place : GIT_DIR=.git/ Cela fonctionnera

0voto

ThorSummoner Points 396

Dans mon cas, j'avais spécifié un arbre de travail, et cela casse sur certaines commandes, comme pull (ou plus précisément fetch ).

Pour désactiver l'arbre de travail s'il se trouve dans votre configuration git, il faut passer par :

git config --unset core.worktree

(Il existe d'autres façons de définir un arbre de travail)

Il est important de noter,

Il n'y a pratiquement aucune chance que cela soit votre problème, à moins que vous n'ayez vous-même creusé ce trou autour de vous en utilisant un arbre de travail personnalisé en premier lieu.

Banter :

Cela implique pour moi que les internes de git utilisent des chemins relatifs à l'arbre de travail. .git/ dans certains cas. D'après mon expérience, les arbres de travail ne sont pas bien supportés, sauf par les parties les plus fondamentales de git. Je n'ai pas expérimenté de manière approfondie, Git se comporterait probablement si je configurais correctement la variable de configuration git directory, avec laquelle je n'ai pas joué.

-1voto

Ariejan Points 6567

Vous avez probablement un problème d'autorisations. Je ne suis pas sûr de la façon dont vous avez configuré votre dépôt git, mais s'il est exécuté sous le nom d'utilisateur git l'utilisateur, assurez-vous que git l'utilisateur est autorisé à effectuer le git pull dans le répertoire de votre projet.

En option, essayez ceci pour savoir quel utilisateur vous êtes lorsque le hook est exécuté :

echo `whoami`

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