No, no es necesario que agregue su submódulo a su .gitignore
: lo que el padre verá en su submódulo es un gitlink (una entrada especialmode 160000
).
Eso significa: cualquier cambio realizado directamente en un submódulo debe ir seguido de una confirmación en el directorio principal.
De esa manera, el directorio padre registrará la confirmación correcta para el estado del submódulo: esa confirmación es el "gitlink" mencionado anteriormente;
Puede leer más sobre esa política en " actualización del submódulo git (verdadera naturaleza de los submódulos) ".
La idea principal detrás de los submódulos es un enfoque basado en componentes , donde hace referencia a otros repositorios en confirmaciones específicas. Pero si cambia algo en esos submódulos, también debe actualizar esas referencias en el repositorio principal.
Tenga en cuenta que con Git 2.13 (Q2 2017), aunque no ignora el gitlink, aún puede ignorar el submódulo con:
git config submodule.<name>.active false
Ver más en " Ignorar nuevas confirmaciones para el submódulo git ".
Nota: con Git 2.15.x / 2.16 (Q1 2018), ignorar un submódulo es más preciso.
" git status --ignored --untracked
" no se detuvo en un árbol de trabajo de un proyecto separado que está incrustado en un directorio ignorado y enumera los archivos en ese otro proyecto, en lugar de simplemente mostrar el directorio como ignorado.
Consulte la confirmación fadb482 (25 de octubre de 2017) de Johannes Schindelin ( dscho
) .
(Combinado por Junio C Hamano - gitster
- en el compromiso da7996a , 06 de noviembre de 2017)
status
: no se confunda con submódulos en directorios excluidos
Pasamos meticulosamente la exclude
bandera a la treat_directory()
función para que podamos indicar que los archivos que contiene se excluyen en lugar de no rastrear cuando se repite.
Pero todavía no tratamos los submódulos de la misma manera.
Por eso, git status --ignored --untracked
con un submódulo
submodule
en un gitignored tracked/
se mostraría el submódulo en la Untracked files
sección " ", por ejemplo
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
tracked/submodule/
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/initial.t
En su lugar, querríamos que mostrara el submódulo en la Ignored files
sección " ":
On branch master
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/
.gitmodules
archivo. Es cierto que este archivo (el.gitmodules
) podría incluir credenciales, pero si se usa solo para clonar repositorios públicos, no es necesario que las incluya. Además, se pueden almacenar en caché de todos modos, incluso en Windows, con ayudantes de credenciales como "Git Credential Manager para Windows" ( github.com/Microsoft/Git-Credential-Manager-for-Windows/… ). Entonces, tener credenciales en el.gitmodules
no es una fatalidad.Por alguna razón, submodule.module-name.active no funcionó para mí.
Por eso usé submodule.module-name.ignore
https://git-scm.com/docs/gitmodules : aquí puede encontrar una descripción de los posibles valores para el parámetro
Me funciona para (nuevas confirmaciones) y (contenido modificado) mensajes.
fuente
Para agregar a la respuesta aceptada, descubrí que agregar la carpeta del submódulo Git a .gitignore en realidad causa problemas, particularmente al intentar crear un nuevo clon del proyecto. Específicamente, al ejecutar los comandos normales de clonación del submódulo, la carpeta del submódulo estaba vacía:
Solo intentando volver a ejecutar
estaba claro cuál era el problema, según el resultado:
En lugar de agregar
-f
, eliminé la carpeta del submódulo Git de .gitignore y volví a ejecutar los comandos de clonación del submódulo, que ahora crearon con éxito la carpeta. Creo que puede haber un error en el sentido de que uno de los comandos de clonación del submódulo respeta .gitignore pero no advierte que se está saltando un submódulo en consecuencia.fuente