2011-11-03 14 views
36

esto es lo que mi git status 'resultado es idéntico:submódulos de Git con contenido modificado y sin seguimiento: ¿por qué y cómo eliminarlo?

# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# (commit or discard the untracked or modified content in submodules) 
# 
# modified: vim/bundle/pathogen (modified content) 
# modified: vim/bundle/sparkup (untracked content) 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

corriendo git diff vim muestra esto:

diff --git a/vim/bundle/pathogen b/vim/bundle/pathogen 
--- a/vim/bundle/pathogen 
+++ b/vim/bundle/pathogen 
@@ -1 +1 @@ 
-Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf 
+Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf-dirty 
diff --git a/vim/bundle/sparkup b/vim/bundle/sparkup 
--- a/vim/bundle/sparkup 
+++ b/vim/bundle/sparkup 
@@ -1 +1 @@ 
-Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70 
+Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70-dirty 

¿Por qué es el uno sin seguimiento, el otro modificado, lo que quiere decir la diferencia? Pero lo más importante: ¿cómo sucedió y cómo deshacerse de él?

+0

Esta respuesta: http://stackoverflow.com/a/5127213/199649 evoca más opción. – charlax

Respuesta

41

Uno de los archivos rastreados en vim/bundle/pathogen se ha modificado de alguna manera. También hay contenido sin seguimiento (y no ignorado) en el submódulo vim/bundle/sparkup. En cualquier caso, la forma de descubrir qué es lo que se modifica/no rastrea es cambiar al directorio del submódulo y ejecutar git status. (En el caso de archivos sin seguimiento en un submódulo, esto es con frecuencia una acumulación de producto que no ha sido añadido a .gitignore en sentido ascendente.)

+14

+1 sobre 'cambiar al directorio del submódulo' –

+0

+1 parece obvio, pero esto me dejó perplejo un poco. Mi submódulo no ignoraba nada, pero el repositorio raíz era. – bentford

1

Como el autor de estados patógenos en el FAQ, puede ignorar las etiquetas a nivel mundial:

git config --global core.excludesfile '~/.cvsignore' 
echo tags >> ~/.cvsignore 
17

Dirígete al directorio del submódulo y asegúrate de que no se está creando nada (una salida de algún tipo) sin que tú lo sepas.

cd submoduledir/ 
git status 

Si hay archivos sin seguimiento de aquí, sólo hacer esto para eliminarlos:

git reset --hard HEAD 
git clean -fxd 
+1

Descubrí que, aunque los archivos no registrados no existían realmente en el disco, Git parecía comportarse como si lo estuvieran. No sé por qué sucedió esto, pero el uso del comando limpiar según su ejemplo funcionó. –

+2

Gracias por eliminar todo lo que estaba bajo .gitignore. Ahora toda mi configuración IDE y el caché del proveedor ya no están ... N.B. esto eliminará todo lo que es .gitignore'd –

3

Si estás realmente seguro de que desea sólo lo hacen (estoy gestión de paquetes vim con patógeno y submódulos de git y de alguna forma logré obtener algunas carpetas de etiquetas en los repositorios, y simplemente tenían que irse) puede recorrer los submódulos y eliminar los archivos sin seguimiento.

cd YOUR_REPO_WITH_SUBMODULES/ 
git submodule foreach git clean -f -d 

-f a la fuerza, -d para eliminar los directorios

Puede comprobar los documentos aquí: https://git-scm.com/docs/git-clean

Cuestiones relacionadas