No es posible realizar un seguimiento de los archivos dentro de submódulos de Git
-
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?
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
':
- El archivo coincide con un patrón de
$GIT_DIR/exclude
. - El archivo coincide con un patrón en un archivo
.gitignore
dentro del repositorio. - El archivo coincide con un patrón en un archivo
.gitignore
específica del usuario (especificado por 'git config --global core.excludesfile
'). - 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:
- El archivo
.gitmodules
en tu repositorio principal. - Una entrada en el
.git/config
de tu repositorio principal. - 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.
- Eliminar la línea correspondiente del archivo
.gitmodules
. - Eliminar la sección correspondiente de
.git/config
. - Ejecutar
git rm --cached path_to_submodule
(sin barra final). - 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:
-
cd path_to_submodule
-
rm .git
-
cd ..
-
git add path_to_submodule
-
git status
-
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 eneditors/vim/vimdoclet
- No se
.git
directorio enshells/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