No es posible realizar un seguimiento de los archivos dentro de submódulos de Git

StackOverflow https://stackoverflow.com/questions/1084969

  •  23-08-2019
  •  | 
  •  

Pregunta

Problema:. para añadir archivos a la ./shells/smallApps/* a Git en ./.git/ cuando no tengo los archivos a la ./.git/info/exclude ni en ningún -limas .gitignore

Esta pregunta se basa en esta banda de rodamiento donde el problema no se resuelve por completo.

corro

$git status                                                                                                                                          ~/bin
# On branch master
nothing to commit (working directory clean)
$git ls-files                                                                                                                                        ~/bin
Screen/dev/vim-open.screen
--- cut ---

Me cuenta que no tengo los archivos "conchas / smallApps / *" en mi Git

$ls shells/smallApps/                                                                                                                                ~/bin
devTodo     extract     
                                                                                                                                             ~/bin

Quiero añadir a mi Git ejecutando

$git add shells/smallApps/devTodo shells/smallApps/extract
fatal: Path 'shells/smallApps/devTodo' is in submodule 'shells/smallApps'
$git add .         

Tomo nota de que los archivos no se agregan a mi Git por alguna razón tal que

$git status                                                                                                                                          ~/bin 
# On branch master
nothing to commit (working directory clean)

No tengo los archivos a la .git / info / excluye ni al .gitignore -limas.

¿Qué significa la última advertencia?

¿Fue útil?

Solución

Actualizar

Hay dos razones generales por Git ignorará un archivo: gitignore y submodules .

Para ser más específicos, las siguientes condiciones causarán Git hacer caso omiso de un archivo cuando se invoca 'git add':

  1. El archivo coincide con un patrón de $GIT_DIR/exclude.
  2. El archivo coincide con un patrón en un archivo .gitignore dentro del repositorio.
  3. El archivo coincide con un patrón en un archivo .gitignore específica del usuario (especificado por 'git config --global core.excludesfile').
  4. El archivo es parte de un submódulo.

Forzar 'git add' en un archivo ignorado:

Puede comprobar para ver si un determinado archivo se ignora invocando 'git add full/path/to/file'.

Los estados página hombre que "Si un archivo ignorado se especifica explícitamente en la línea de comandos, el comando fallará con una lista de ficheros ignorados."

Si se ignora el archivo, puede forzar a ser añadido con 'git add --force full/path/to/file'.

Instrucciones para eliminar una referencia submódulo:

Como se ha señalado en una respuesta anterior, shells/smallApps es una submódulo en su repositorio .

Si el archivo es parte de un submódulo, la situación es más compleja. No se puede modificar el contenido del submódulo dentro del proyecto principal.

Si desea eliminar la referencia submódulo y directamente realizar un seguimiento de los archivos en tu repositorio principal, hay varios pasos que se deben realizar. No se puede simplemente eliminar el directorio ".git" del submódulo. Hay tres vínculos entre su repositorio principal y el sub-módulo:

  1. El archivo .gitmodules en tu repositorio principal.
  2. Una entrada en el .git/config de tu repositorio principal.
  3. ningún commit relacionados con el submódulo en su historia principal de recompra.

relacionado Así que la pregunta , es necesario realizar la pasos siguientes para quitar completamente el sub-módulo:

NOTA: Si otra rama depende de este submódulo, luego se retire puede corromper su repositorio! Esta es una operación peligrosa ... utilizar con precaución.

  1. Eliminar la línea correspondiente del archivo .gitmodules.
  2. Eliminar la sección correspondiente de .git/config.
  3. Ejecutar git rm --cached path_to_submodule (sin barra final).
  4. Commit

Los archivos que fueron parte del submódulo están ahora sin seguimiento y usted puede decidir mantener o eliminarlos según se desee (con la única salvedad mencionada a continuación).

Si usted no necesita estos archivos, es posible que simplemente eliminarlos.

Advertencia: si desea mantener estos archivos (que parecen querer), deberá eliminar manualmente el directorio de la carpeta .git submódulo:

  1. cd path_to_submodule
  2. rm .git
  3. cd ..
  4. git add path_to_submodule
  5. git status
  6. git commit

ACTUALIZACIÓN:

Solicitud para más información:

Para ayudar a depurar este problema, por favor, puesto la salida de la siguiente sesión completa de comandos:

cd to the top-level directory in your repo
ls -al
cat .git/config
find . -name ".git*"
git status
git add editors
git add shells
git status

En base a la descripción de lo que ha hecho hasta ahora, espero ver:

  • No hay archivo .gitmodules en cualquier lugar
  • Sólo un directorio .git (que se encuentra en la raíz de tu repositorio)
  • No se .git directorio en editors/vim/vimdoclet
  • No se .git directorio en shells/smallApps

Otros consejos

Veo que tienes git add diciendo algo acerca de submódulos. ¿Se han anidado repositorios Git? Haga lo siguiente:

$ find . -name .git

¿Cuántas directorios .git están en la lista? Si hay más de uno, entonces usted tiene múltiples repositorios anidados y que podría ser una causa de algunos de esta confusión.

Debe tener en cuenta la publicación de esta pregunta a la lista de correo Git (git@vger.kernel.org). Es probable que obtener una respuesta más rápida y completa.

Si usted decide colocar allí, asegúrese de incluir:

  • Una descripción de lo que está tratando de lograr.
  • Una descripción del problema encontrado.
  • Una completa muestra registro de la sesión:
    • cd al directorio de nivel superior en tu repositorio
    • ls -al
    • cat .git/config
    • find . -name ".git*"
    • git status
    • git add editors
    • git add shells
    • git status
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top