2010-07-24 35 views
13

añadí algunas plantillas Haml a mis Rails 3 proyecto conno puede deshacerse del submódulo git

git clone git://github.com/psynix/rails3_haml_scaffold_generator.git lib/generators/haml 

sólo para descubrir, cuando traté de editar algunos de esos archivos, que se trataba de un submódulo, por lo No pude confirmar los cambios que hice en el directorio lib/generators/haml. Ahora cada vez que git status, me sale

# 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) 
# 
# modified: lib/generators/haml 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

pero git add lib/generators/haml no tiene ningún efecto. Realmente sólo quieren tener los archivos, no un submódulo, pero estoy encontrando el submódulo imposible deshacerse de:

> git rm --cached lib/generators/haml 
rm 'lib/generators/haml' 
> git status 

# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# deleted: lib/generators/haml 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# lib/generators/ 

> git commit -m "Removed submodule" 

[master 02ae4c7] Removed submodule 
1 files changed, 0 insertions(+), 1 deletions(-) 
delete mode 160000 lib/generators/haml 

> git status 

# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# lib/generators/ 
nothing added to commit but untracked files present (use "git add" to track) 

> git add lib/generators/haml 
> git status 

# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# new file: lib/generators/haml 
# 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: lib/generators/haml 

> git commit -m "Re-added lib/generators/haml" 

[master c966912] Re-added lib/generators/haml 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 160000 lib/generators/haml 

> git status 

# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: lib/generators/haml 

adicionales git add s son inútiles. Si intento git rm -rf lib/generators/haml, consigo

fatal: git rm: 'lib/generators/haml': Operation not permitted 

Simplemente no va a morir! He buscado how to delete submodules, pero en este caso, no hay ningún archivo .submodules, ni hay ninguna mención del submódulo en .git/config. Sin embargo, si me quedo git submodule update, consigo

No submodule mapping found in .gitmodules for path 'lib/generators/haml' 

He eliminado el directorio, pero me da los mismos resultados! ¿Que esta pasando? ¿Debo crear un archivo .gitmodules solo para eliminar el submódulo?

Respuesta

6

Si no hay un sub-módulo, es posible que (es decir, 'haml') es, en realidad no un submódulo?

git clone git://github.com/psynix/rails3_haml_scaffold_generator.git lib/generators/haml 

significa: crear lib/generators/haml directorio, y la salida en el que la rama principal de git://github.com/psynix/rails3_haml_scaffold_generator.git.

El hecho de que se puede hacer un git status no desde la raíz de su nueva operación (lib/generators/haml), pero tres niveles por encima (donde lib es) significa que tiene un acuerdo de recompra clonar dentro de un acuerdo de recompra.

Ambos repositorios pueden funcionar de forma independiente, pero debe agregar lib/generators/haml al .gitignore del repositorio principal (como en hits SO question).

+0

Gracias, agregarlo a '.gitignore' fue una buena idea. –

+1

pero esto no empujará los nuevos archivos en el repositorio, FYI – andho

+0

mi problema resultó ser no relacionado, pero esto ayudó. –

6

El submódulo se muestra en estado de git como modificado si tiene archivos sin seguimiento. Si se invoca git diff lib/generators/haml, lo más likeyl ve algo como esto:

diff --git a/lib/generators/haml b/lib/generators/haml 
index 3019fec..653c59a 160000 
--- a/lib/generators/haml 
+++ b/lib/generators/haml 
@@ -1 +1 @@ 
-Subproject commit 653c59ad72925c9ccbde67e8e484e15d4b6dd25d 
+Subproject commit 653c59ad72925c9ccbde67e8e484e15d4b6dd25d-dirty 

Esto significa que dentro de este sub-módulo son algunos archivos sin seguimiento izquierda. No se pueden agregar a través de comandos en el proyecto principal; en su lugar, debe atravesar el sumbodule y agregarlos (o agregar entradas al .gitignore) ... O simplemente puede ignorar el mensaje de estado.

La última versión Git (1.7.1, creo) muestra esta información en el estado:

# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: lib/generators/haml (untracked content) 
+0

Bien, creo que entiendo: debería entrar en 'lib/generators/haml' y luego hacer git cosas desde allí cada vez que cambio algo ahí. Como sugirió, actualicé mi git de 1.7.0.5 a 1.7.2, y eso me da el mensaje más útil. Todavía me sorprende que git pensara que había un submódulo incluso después de volar 'lib/generators/haml' junto con su directorio' .git'. –

0

Usted podría haber usado:

git add lib/generators/haml/ 

para añadir los archivos en el submódulo a la cabeza y retire el submódulo.Pero, de nuevo, podría no funcionar porque realmente no tienes un submódulo.

Tenga en cuenta que hay una barra inclinada posterior a la ruta. Si pones este git elimina el submódulo y lo pone en la cabeza, al contrario:

git add lib/generators/haml 

que acaba de cambiar el comprometen a ser retirado de la sub-módulo en submódulos git.

Cuestiones relacionadas