2012-09-04 202 views
40

Estoy tratando de inicializar un nuevo repositorio GIT de Debian (en realidad una VM en Virtualbox, instalado y en ejecución en Mac OS X):GIT fatal: argumento ambiguo 'HEAD': revisión desconocida o ruta no en el árbol de trabajo

[[email protected]:~ $] mkdir test 
[[email protected]:~ $] cd test 
[[email protected]: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 
[[email protected]:test (master #) $] 

¿Cuál es el problema?

+0

Esto no debería suceder ... ¿Cuál es la versión de Git? ¿Cómo se instaló? – CharlesB

+2

Git se instaló a través de apt-get y la versión es 1.7.2.5. – David

+4

Me parece que está utilizando algunos comandos de git en el intérprete de comandos de shell: creo que el mensaje de error proviene de allí. – ebneter

Respuesta

20

Como han señalado otros, este mensaje procede de su intérprete de comandos de shell. El problema es que en un repositorio recién creado HEAD (.git/HEAD) apunta a una referencia que aún no existe.

% 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 

Parece que rev-parse está siendo utilizado sin comprobación de errores suficiente antes de mano. Después de que se haya creado la primera confirmación, .git/refs/heads se ve un poco diferente y git rev-parse HEAD ya no fallará.

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

En la función que actualiza la información de Git para el resto de mi intérprete de comandos (versión muy modificada de wunjo tema de aviso para ZSH), tengo el siguiente para evitar esto:

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 ... 
} 
+1

Versiones anteriores de git (al menos sé que esto es cierto para 1.6.4.4) no use 'head' como sinónimo de' HEAD'. En mi caso, estoy atascado con esta versión anterior de git y pude solucionar el problema refiriéndome a 'HEAD' en mis intentos en vez de' head'. –

2

Jacob Helwig menciona que in his answer:

parece que rev-parse está siendo utilizado sin comprobación de errores suficiente de antemano

Commit 62f162f de Jeff King (peff) debería mejorar la robustez de git rev-parse en Git 1,9/2,0 (Q1 2014) (además de commit 1418567):

Para casos en los que no coinciden (por ejemplo, "doesnotexist..HEAD") , entonces querríamos tratar de tratar el argumento como un nombre de archivo.
try_difference() tiene este derecho, y siempre se deshace en este caso.
Sin embargo, try_parent_shorthand() Nunca unmunges, lo que lleva a los mensajes de error incorrectos, o resultados, incluso incorrectas:

$ 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 <command> [<revision>...] -- [<file>...]' 
5

tuve este problema al tener una pantalla personalizada en mi terminal cuando se crea un nuevo proyecto Git (tengo mi visualización de la rama antes de la ruta, por ejemplo:/current/path). Todo lo que tenía que hacer era hacer mi compromiso inicial con mi sucursal principal para que este mensaje desapareciera.

Cuestiones relacionadas