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
.gitignoreen un.gitignoreespecífico de cada módulo. - o puede agregar el mismo contenido ignorado al
.git/info/excludedel 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 untrackedo agregue un archivo global
.gitignore(a menudo~/.gitignore-global). Como por ejemplo.DS_Storeo en mi casoCarthage/Buildsegú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.excludesFileen el~/.gitconfigdel usuario. Su valor predeterminado es$XDG_CONFIG_HOME/git/ignore. Si$XDG_CONFIG_HOMEno está configurado o está vacío, se usa$HOME/.config/git/ignoresu 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