tag - No se puede rastrear archivos dentro de los submódulos de Git
submodulos git (3)
Debe considerar publicar esta pregunta en la lista de correo de Git ( [email protected]
). Es probable que obtenga una respuesta más rápida y completa.
Si decides publicar allí, asegúrate de incluir:
- Una descripción de lo que estás tratando de lograr.
- Una descripción del problema que ha encontrado.
- Un registro de sesión completo que muestra:
- 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
Problema: agregar archivos en ./shells/smallApps/*
a Git en ./.git/
cuando no tengo los archivos en ./.git/info/exclude
ni en ningún .gitignore
.
Esta pregunta se basa en esta banda de rodadura 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 ---
Observo que no tengo los archivos "shells / smallApps / *" en mi Git
$ls shells/smallApps/ ~/bin
devTodo extract
~/bin
Quiero agregarlos a mi Git corriendo
$git add shells/smallApps/devTodo shells/smallApps/extract
fatal: Path ''shells/smallApps/devTodo'' is in submodule ''shells/smallApps''
$git add .
Observo 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 en .git / info / exclude ni en .gitignore -files.
¿Qué significa la última advertencia?
Veo que tienes git add
diciendo algo acerca de los submódulos. ¿Tienes anidados repositorios de Git? Hacer esto:
$ find . -name .git
¿Cuántos directorios .git
están listados? Si hay más de uno, entonces tienes varios repositorios anidados y eso podría ser la causa de algo de esta confusión.
ACTUALIZAR
Hay dos razones generales por las que Git ignorará un archivo: gitignore
y submodules
.
Para ser más específicos, las siguientes condiciones harán que Git ignore un archivo cuando se invoca '' git add
'':
- El archivo coincide con un patrón
$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ífico del.gitignore
(especificado por ''git config --global core.excludesfile
''). - El archivo es parte de un submódulo.
Forzando '' git add
'' en un archivo ignorado:
Puede verificar si un archivo en particular se ignora al invocar '' git add full/path/to/file
''.
La página del manual indica que "Si un archivo ignorado se especifica explícitamente en la línea de comandos, el comando fallará con una lista de archivos ignorados".
Si se ignora el archivo, puede forzar que se agregue con '' git add --force full/path/to/file
''.
Instrucciones para eliminar una referencia de submódulo:
Como se señaló en una respuesta anterior, shells/smallApps
es un submodules en su repositorio.
Si el archivo es parte de un submódulo, la situación es más compleja. No puede modificar el contenido del submódulo desde el proyecto principal.
Si desea eliminar la referencia del submódulo y realizar un seguimiento directo de los archivos en su repositorio principal, hay varios pasos que deben realizarse. No puede simplemente eliminar el directorio ".git" del submódulo. Hay tres enlaces entre su repositorio principal y el submódulo:
- El archivo
.gitmodules
en su repositorio principal. - Una entrada en el
.git/config
de su repositorio principal. - Cualquier compromiso relacionado con el submódulo en su historial de repositorio principal.
Por esta pregunta de SO relacionada , debe realizar los siguientes pasos para eliminar completamente el sub-módulo:
NOTA: Si otra rama depende de este submódulo, ¡al eliminarlo puede dañar su repositorio! Esta es una operación peligrosa ... use con precaución.
- Elimine la línea relevante del archivo
.gitmodules
. - Eliminar la sección correspondiente de
.git/config
. - Ejecute
git rm --cached path_to_submodule
(sin barra diagonal final). - Cometer
Los archivos que formaban parte del submódulo ahora están sin seguimiento y usted puede decidir mantenerlos o eliminarlos según lo desee (con la advertencia mencionada a continuación).
Si no necesita estos archivos, simplemente puede eliminarlos.
Advertencia: si desea conservar estos archivos (que parece que desea), debe eliminar manualmente el directorio .git
de la carpeta de submódulos:
-
cd path_to_submodule
-
rm .git
-
cd ..
-
git add path_to_submodule
-
git status
-
git commit
ACTUALIZAR:
Solicitud de más información:
Para ayudar a depurar este problema, publique el resultado 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
Basado en la descripción de lo que has hecho hasta ahora, espero ver:
- Ningún archivo
.gitmodules
ninguna parte - Solo un directorio
.git
(que se encuentra en la raíz de su repositorio) - No hay un directorio
.git
en loseditors/vim/vimdoclet
- Ningún directorio
.git
enshells/smallApps