2011-09-16 4 views
11

Ho un repository git con un albero di lavoro collegato che sto spingendo a un repository nudo su un telecomando. Il repository include un sottomodulo.Come posso avviare/aggiornare un sottomodulo git in un albero di lavoro dopo aver premuto su una directory di lavoro nuda?

All'estremità remota: I controllare il repo ad un albero di lavoro git checkout -f aver impostato GIT-DIR e GIT-WORK-TREE env vars.

Nell'albero di lavoro ora vedo tutti i file previsti e una directory vuota per il sottomodulo ('MySubmodule').

Ho poi fare:

git submodule init 
git submodule update 

Questo gli errori con un messaggio del tipo:

working tree '../../workTree/' already exists 
Clone of '[email protected]:user/MySubmodule.git' into submodule path 'MySubmodule' failed 

La directory modulo vuoto è ora anche 'scomparso' dal albero di lavoro ...

Non sono sicuro di dove mi stia sbagliando, in pratica voglio solo controllare i file del sottomodulo come farebbe con 'git submodule update'.

+0

Hai mai risolto questo? Se è così sarei felice di sapere come – shevron

+0

un repository nudo non dovrebbe avere un albero di lavoro e quindi non dovrebbe avere un albero di lavoro per un sottomodulo. [informazioni simili] (http://stackoverflow.com/questions/1764380/push-to-non-bare-repository#comment29366144_1764380) –

+0

Ho avuto lo stesso problema durante la scrittura di uno script di distribuzione, sembra che non sia possibile inizializzare sottomoduli in un repository nudo estratto. –

risposta

0

Prima di tutto, perché è necessario eseguire il check-in di un semplice repo? Basta clonarlo da qualche altra parte e lavorare con un normale repo non nudo.

Ma se si ha realmente bisogno di farlo, è possibile rinominare la cartella per .git, cambiare bare = true-bare = false in .git/config e poi fare git checkout.

+3

Uso un repository nudo per i motivi descritti qui: http://gitready.com/advanced/2009/02/01/push-to-only-bare-repositories.html Tutte le funzionalità di repository bare funzionano perfettamente a parte dal controllo del sottomodulo all'albero di lavoro distaccato. – arlogb

1

Sembra che quando si esegue "update git submodule" non si possa impostare GIT_WORK_TREE ... proverà a utilizzarlo come albero di lavoro per il sottomodulo, non per il super progetto.

ho dovuto aggiornare il mio script di post-aggiornamento dei server ...

/usr/local/bin/git --git-dir="$PROJECT_DIR" --work-tree="$PROJECT_DEMO" checkout -f; 

cd "$PROJECT_DEMO"; 
/usr/local/bin/git --git-dir="$PROJECT_DIR" submodule update --init --recursive; 

Avviso non ho impostare le variabili env, e che il comando modulo non ho avuto il "--work-albero "set ... sembra che abbia bisogno di lavorare dal cwd.

+7

Questo non ha funzionato. remote: fatale:/usr/libexec/git-core/git-submodule non può essere utilizzato senza un albero di lavoro. – berkus

+0

L'aggiunta di '--work-tree =" $ PROJECT_DEMO "' ha funzionato per me. – DisgruntledGoat