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 casoCarthage/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