2012-04-06 31 views
8

Soy bastante nuevo en Git y haciendo mi mejor esfuerzo para encontrar algún tipo de documentación sobre este problema en vano.submódulo git add fatal: No es un repositorio Git

Aquí es mi comando:

$ git submodule add https://github.com/joliver/EventStore.git externalsource/JOliverEventStore/ 

fatal: No es un repositorio git: ../.git/modules/externalsource/JOliverEventStore Incapaz de pago y envío submódulo 'externalsource/JOliverEventStore'

yo estoy en mi raíz de mi repo y actualmente no existe un directorio para /externalsource/JO liverEventStore/. El error está hablando de un directorio que no tengo conocimiento de.

si añado el submódulo al directorio raíz de esta manera:

$ git submodule add https://github.com/joliver/EventStore.git JOliverEventStore 

no tengo ningún problema y se crea la carpeta en el directorio raíz.

Cualquier observación sería muy apreciada.

+0

¿Intentó crear el directorio 'externalsource' y luego cd'ing y agregar el submódulo? –

+0

lo hice y al agregar un submódulo tienes que hacerlo desde el directorio raíz fue el error –

+0

Tienes una barra al final de 'JOliverEventStore' en el comando original. Tal vez git sea demasiado estúpido como para pensar que quieres pagar en 'JOliverEventStore' debajo del directorio' JOliverEventStore' (que no existe)? –

Respuesta

11

Es posible depende de la versión de Git que está utilizando: este recent thread (February 2012) menciona un error:

Desde hace poco un submódulo con el nombre <name> tiene su directorio de Git en el directorio .git/modules/<name> del SuperProject mientras que el árbol de trabajo contiene una gitfile apuntando allí.

Cuando se agrega el mismo submódulo en una rama donde no estaba presente hasta el momento (no se encuentra en el archivo .gitmodules), el nombre no se inicializa de la ruta como debería.
Esto lleva a una ruta incorrecta ingresada en el gitfile cuando se encuentra el directorio .git/modules/<name>, ya que este usa felizmente el nombre - ahora vacío -.
Siempre apunta solo un directorio hacia arriba, incluso si tenemos una ruta más profunda en la jerarquía del directorio.

Pero más en general, utiliza el argumento de <path>git submodule:

<path> es la ubicación relativa para el submódulo clonado a existir en el SuperProject.

  • Si <path> no existe, entonces el submódulo se crea clonando desde la URL nombrada.
  • Si <path> existe y ya es un repositorio válido de git, entonces esto se agrega al conjunto de cambios sin clonar.
    Este segundo formulario se proporciona para facilitar la creación de un nuevo submódulo desde cero, y supone que el usuario más tarde empujará el submódulo a la URL dada.

eoinoc menciones in the comments otra causa, que se detalla en la pregunta "git status returns fatal: Not a git repository but .git exists and HEAD has proper permissions".

La ubicación de mi repositorio había cambiado, y necesitaba actualizar los archivos de configuración de git.

+0

Gracias vonc. Vi ese artículo también. Una actualización es prolly en orden. Aunque no vi si se resolvió en la última versión. Parece una tarea tan común que me sorprendió ver el problema –

+0

La actualización de Git 1.6.x (incluida con Mountain Lion) a 1.8.1 solucionó el problema. –

+1

El error no fue la causa de que yo vea el mismo mensaje de error. La ubicación de mi repositorio había cambiado y necesitaba actualizar los archivos de configuración de git: http://stackoverflow.com/questions/10144149/git-status-returns-fatal-not-a-git-repository-but-git-exists-and -head-has-prop – eoinoc

Cuestiones relacionadas