macos - objeto - en where clause es ambigua
GIT fatal: argumento ambiguo ''HEAD'': revisión desconocida o ruta no en el árbol de trabajo (4)
Intento inicializar un nuevo repositorio GIT de Debian (en realidad, una VM en Virtualbox, instalado y en ejecución en 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 #) $]
¿Cuál es el problema?
Como otros señalaron, este mensaje proviene 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 el rev-parse
se está utilizando sin suficiente comprobación de errores antes de la mano. Después de que se haya creado el primer commit .git/refs/heads
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 del indicador de shell (versión muy modificada del tema de solicitud de wunjo para ZSH), tengo lo 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 ...
}
Tuve este problema al tener una pantalla personalizada en mi terminal al crear un nuevo proyecto git (tengo mi visualización de 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.
Usualmente uso git en mi máquina Linux, pero en el trabajo tengo que usar Windows. Tuve el mismo problema al intentar comprometer la primera confirmación en un entorno de Windows.
Para aquellos que todavía enfrentan este problema, pude resolverlo de la siguiente manera:
$ git commit --allow-empty -n -m "Initial commit".
menciona en su respuesta que:
Parece que el rev-parse se está utilizando sin suficiente comprobación de errores antes de la mano
El compromiso 62f162f de Jeff King ( peff
) debería mejorar la solidez de git rev-parse
en Git 1.9 / 2.0 (Q1 2014) (además del compromiso 1418567 ):
Para los casos en que no coincidamos (por ej., "
doesnotexist..HEAD
"),doesnotexist..HEAD
tratar el argumento como un nombre de archivo.
try_difference()
obtiene este derecho, y siempre se libera en este caso.
Sin embargo,try_parent_shorthand()
nunca se libera, lo que lleva a mensajes de error incorrectos o incluso a resultados incorrectos:
$ 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>...]''