obtenir “fatal: pas un repository git: ‘.'” lors de l’utilisation d’un hook post-update pour exécuter ‘git pull’ sur un autre repository

Je ne suis pas nouveau, alors je m’excuse (et corrigez-moi s’il vous plaît) si j’abuse de la terminologie ici, mais je ferai de mon mieux.

J’essaie de configurer un repo git (hub) nu et une copie de travail du site de développement (prime) sur un serveur Web. J’ai essayé de le dessiner après cet article . Je souhaite que la copie de travail du développement soit mise à jour chaque fois que le repo du hub est poussé. J’ai l’impression que le point d’ancrage approprié est la post-update , que j’ai créée ainsi:

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

Mettre à jour

Lorsque j’introduis les modifications de mon repository local dans le concentrateur nu, j’obtiens la sortie suivante du script post-mise à jour:

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

Cependant, si je SSH dans le serveur en tant qu’utilisateur ‘sites’ et que je exécute ce script manuellement, cela fonctionne très bien. Avez-vous des idées sur ce qui pourrait mal se passer avec ce hook ou ce script?

Voici le script qui a finalement fonctionné. Je pense que le bit qui me manquait à l’origine et qui l’empêchait de fonctionner à distance était le unset GIT_DIR

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

Essayez plutôt:

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

Malgré cela, GIT_DIR ne fonctionne pas.

le problème se produit lorsque vous définissez GIT_DIR à tort ailleurs.

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

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

Pour désélectionner l’arbre de travail s’il se trouve dans votre configuration git, utilisez:

 git config --unset core.worktree 

(Il existe d’autres moyens de définir un arbre de travail)

Important de noter,

Il n’y a pratiquement aucun changement à ce problème, sauf si vous avez creusé ce trou autour de vous en utilisant un worktree personnalisé en premier lieu.

Plaisanter:

Cela implique pour moi que les internes de git utilisent des chemins relatifs au worktree + .git/ dans certains cas. Dans mon expérience, les worktrees ne sont pas bien supportés, sauf par les parties les plus fondamentales de git. Je n’ai pas expérimenté à fond, Git se comporterait probablement si je définissais correctement la variable de répertoire git, avec laquelle je n’ai pas joué.

Vous avez probablement un problème de permissions. Je ne suis pas sûr de savoir comment vous avez configuré votre repository nu git, mais s’il fonctionne sous l’utilisateur git , assurez-vous que l’utilisateur de git est autorisé à exécuter git pull dans votre répertoire de projet.

Essayez éventuellement de savoir quel utilisateur vous êtes lorsque le hook est exécuté:

 echo `whoami`