GIT fatal: argument ambigu ‘HEAD’: révision ou chemin inconnu non présent dans l’arborescence

J’essaie d’initialiser un nouveau repository GIT à partir de Debian (en fait une VM sur Virtualbox, installée et exécutée sur Mac OS X):

[david@server-VM-001:~ $] mkdir test [david@server-VM-001:~ $] cd test [david@server-VM-001:test $] git init Initialized empty Git repository in /home/david/test/.git/ fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions [david@server-VM-001:test (master #) $] 

Quel est le problème?

Comme d’autres l’ont souligné, ce message provient de votre invite shell. Le problème est que, dans un repository récemment créé, HEAD ( .git/HEAD ) pointe vers une référence qui n’existe pas encore.

 % git init test Initialized empty shared Git repository in /Users/jhelwig/tmp/test/.git/ % cd test % cat .git/HEAD ref: refs/heads/master % ls -l .git/refs/heads total 0 % git rev-parse HEAD HEAD fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. Use '--' to separate paths from revisions 

Il semble que la rev-parse soit utilisée sans vérification d’erreur suffisante avant. Après la création du premier commit, .git/refs/heads semble un peu différent et git rev-parse HEAD n’échouera plus.

 % ls -l .git/refs/heads total 4 -rw------- 1 jhelwig staff 41 Oct 14 16:07 master % git rev-parse HEAD af0f70f8962f8b88eef679a1854991cb0f337f89 

Dans la fonction qui met à jour les informations Git pour le rest de l’invite de mon shell (version fortement modifiée du thème d’invite de wunjo pour ZSH), voici ce qui suit:

 zgit_info_update() { zgit_info=() local gitdir=$(git rev-parse --git-dir 2>/dev/null) if [ $? -ne 0 ] || [ -z "$gitdir" ]; then return fi # More code ... } 

J’ai eu ce problème en ayant un affichage personnalisé dans mon terminal lors de la création d’un nouveau projet git (j’ai ma twig avant le nom du chemin, par exemple: / current / path). Tout ce que j’avais à faire était de faire mon engagement initial dans ma twig principale pour que ce message disparaisse.

Jacob Helwig mentionne dans sa réponse que:

On dirait que la rev-parse est utilisée sans vérification d’erreur suffisante avant

Commit 62f162f de Jeff King ( peff ) devrait améliorer la robustesse de git rev-parse dans Git 1.9 / 2.0 (T1 2014) (en plus de commit 1418567 ):

Pour les cas où nous ne correspondons pas (par exemple, ” doesnotexist..HEAD “), nous voudrions alors essayer de traiter l’argument comme un nom de fichier.
try_difference() a bien compris, et toujours dans le cas présent.
Cependant, try_parent_shorthand() ne libère jamais, ce qui entraîne des messages d’erreur incorrects, voire des résultats incorrects:

 $ git rev-parse foobar^@ foobar fatal: ambiguous argument 'foobar': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git  [...] -- [...]' 

J’utilise habituellement git sur ma machine Linux, mais au travail, je dois utiliser Windows. J’ai eu le même problème en essayant de valider le premier commit dans un environnement Windows.

Pour ceux qui sont encore confrontés à ce problème, j’ai été en mesure de le résoudre comme suit:

 $ git commit --allow-empty -n -m "Initial commit".