2010-07-24 8 views
13

ho aggiunto alcuni modelli Haml ai miei Rails 3 progetto connon possono sbarazzarsi di git modulo

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

solo per scoprire, quando ho cercato di modificare alcuni di questi file, che si trattava di un modulo, in modo da Non è stato possibile eseguire il commit delle modifiche apportate all'interno della directory lib/generators/haml. Ora ogni volta che git status, ottengo

# 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") 

ma git add lib/generators/haml non ha alcun effetto. Ho davvero voglia di avere i file, non un sottomodulo, ma sto trovando il modulo impossibile sbarazzarsi di:

> 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 

Ulteriori git add s sono inutili. Se provo git rm -rf lib/generators/haml, ottengo

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

E 'solo che non morirà! Ho cercato how to delete submodules, ma in questo caso, non c'è il file .submodules, né c'è menzione del sottomodulo in .git/config. Eppure, se corro git submodule update, ottengo

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

ho cancellato la directory, ma ottengo gli stessi risultati! Cosa sta succedendo? Devo creare un file .gitmodules solo per eliminare il sottomodulo?

risposta

6

Se non c'è modulo, è possibile (cioè 'haml') in realtà non è un sottomodulo?

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

significa: creare lib/generators/haml directory, e nella verifica in essa il ramo maestro di git://github.com/psynix/rails3_haml_scaffold_generator.git.

Il fatto che si può fare un git status non dalla radice del nuovo pronti contro termine (lib/generators/haml), ma tre livelli sopra (dove lib è) significa che si deve clonare un pronti contro termine all'interno di un pronti contro termine.

Entrambi i pronti contro termine possono funzionare in modo indipendente, ma è necessario aggiungere lib/generators/haml allo .gitignore del repository padre (come negli hit SO question).

+0

Grazie, l'aggiunta a '.gitignore' è stata una buona idea. –

+1

ma questo non spingerà i nuovi file nel repository, FYI – andho

+0

il mio problema si è rivelato non correlato, ma questo ha aiutato. –

6

Il sottomodulo viene visualizzato in stato git come modificato se contiene file non tracciati. Se si richiama git diff lib/generators/haml, che molto likeyl vedere qualcosa di simile:

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 

Questo significa che all'interno di questo modulo sono alcuni file non monitorate a sinistra. Non possono essere aggiunti tramite i comandi nel progetto principale; devi invece attraversare il modulo di espansione e aggiungerli (o aggiungere voci a .gitignore) ... Oppure puoi semplicemente ignorare il messaggio di stato.

L'ultima versione Git (1.7.1, credo) mostra le informazioni di 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 (untracked content) 
+0

OK, penso di capire: dovrei andare in 'lib/generators/haml' e quindi fare cose git da lì ogni volta che cambio qualcosa lì dentro. Come hai suggerito, ho aggiornato il mio git dalla 1.7.0.5 alla 1.7.2, e questo mi dà il messaggio più utile. Mi viene ancora in mente che git pensava che ci fosse un sottomodulo anche dopo aver spazzato via 'lib/generators/haml'along con la sua directory' .git'. –

0

si potrebbe avere usato:

git add lib/generators/haml/ 

per aggiungere i file nel modulo alla testa e rimuovere il modulo.Ma di nuovo potrebbe non funzionare perché non hai un sottomodulo.

Si noti che c'è una barra finale dopo il percorso. Se mettete questo git rimuove il modulo e lo mette in testa, a differenza:

git add lib/generators/haml 

che basta cambiare il impegnano a essere controllato dal modulo in sottomoduli git.

Problemi correlati