submodulos submodule rama partir otra ejemplos crear git git-submodules

submodule - ¿Cómo deshacerse de los submódulos de Git sin seguimiento?



git submodule (7)

Parece que no puedo deshacerme del contenido sin seguimiento en los submódulos de Git. Ejecutando git status yields:

# On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # (commit or discard the untracked or modified content in submodules) # # modified: bundle/snipmate (untracked content) # modified: bundle/surround (untracked content) # modified: bundle/trailing-whitespace (untracked content) # modified: bundle/zencoding (untracked content) # no changes added to commit (use "git add" and/or "git commit -a")

Agregar el parámetro --ignore-submodules oculta estos mensajes; pero me pregunto si hay una manera de deshacerse de esta suciedad de una manera más adecuada, básica.


Ayer me quedé atascado en este tema, en un proyecto que tenía cerca de 12 submódulos.

git status estaba mostrando el resultado.

# On branch master # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # (commit or discard the untracked or modified content in submodules) # # modified: proj1 (untracked content) # modified: proj1 (modified content, untracked content) # ...

Para resolver el error de contenido sin seguimiento, tuve que eliminar los archivos sin seguimiento de todos los submódulos (todos eran *.pyc *.pyo , *.pyo generados por python) usando un .gitignore .

Para resolver el otro, tuve que ejecutar la git submodule update que actualizó cada uno de los submódulos.


Dado que el estado de git informa el contenido sin seguimiento, la forma real de tener un estado de limpieza sería ingresar a cada uno de esos submódulos y:

  • agregar y confirmar los contenidos sin seguimiento,
  • o hacer referencia a los contenidos sin .gitignore en un .gitignore específico de cada módulo.
  • o puede agregar el mismo contenido ignorado al .git/info/exclude del submódulo, como peci1 informa en los comentarios .
  • o agregue sucio a la especificación del submódulo, como se menciona en la answer ezraspectre (upvoted).

    git config -f .gitmodules submodule.<path>.ignore untracked

  • o agregue un archivo global .gitignore (a menudo ~/.gitignore-global ). Como por ejemplo .DS_Store o en mi caso Carthage/Build según lo informado por Marián Černý en los comentarios . Ver la página man de .gitginore :

Los patrones que un usuario desea que Git ignore en todas las situaciones (por ejemplo, copia de seguridad o archivos temporales generados por el editor de elección del usuario) generalmente entran en un archivo especificado por core.excludesFile en el ~/.gitconfig del usuario. Su valor predeterminado es $XDG_CONFIG_HOME/git/ignore . Si $XDG_CONFIG_HOME no está configurado o está vacío, se usa $HOME/.config/git/ignore su lugar.


En mi situación, clono módulos como punto de partida para un nuevo módulo en mi entorno ZF2. Lo que hace es poner su propia carpeta .git en el directorio.

La solución en este caso es eliminar la carpeta .git (es probable que necesite mostrar los archivos ocultos para verla).


Encontré esta publicación de blog para trabajar en general. Al agregar la opción ignore = dirty a cada una de las entradas en el archivo .gitmodules .

[submodule "zen-coding-gedit3"] path = zen-coding-gedit3 url = git://github.com/leafac/zen-coding-gedit3.git ignore = dirty


Sería debido a detached HEAD en su rama de submódulo. Vaya a la ruta de su submódulo (por ejemplo: ./bundle/snipmate ), luego git checkout master .

Espero que esto sea de ayuda :)


Si se trata de un problema temporal, puede git reset HEAD --hard a la carpeta del submódulo y ejecutar git reset HEAD --hard pero perderá todos sus cambios dentro del submódulo.


También puede ir a cada directorio de submódulo y actuar como un git separado. Por ejemplo:

cd my/project/submodule git status

... / obtiene la lista de archivos modificados /

git add . //to add all of them to commit into submodule git commit -m "message to your submodule repo"

también puede actualizar su repositorio de submódulo remoto con

git submodule update

después de todo