2009-10-20 28 views
37

Nel mio progetto ho bisogno di usare il codice di terze parti, memorizzato in diversi repository Git. Il mio progetto è anche memorizzato nel repository Git (separato). Ci sono diverse persone che lavorano con me nel progetto principale, e io sono il manutentore.Flusso di lavoro sottomoduli Git

Nei progetti precedenti, ero solito copiare manualmente le dipendenze nell'albero di lavoro Git, aggiungendo un piccolo file che specifica la versione che utilizzo.

Ora questo è piuttosto scomodo poiché è necessario aggiornare quotidianamente una delle dipendenze e spesso contribuisco al codice stesso, per la maggior parte del tempo, insieme alle modifiche apportate al progetto principale.

Ho deciso di provare i sottomoduli Git per la gestione. Più li provo, più divento frustrato. Sembra persino che la copia manuale sia, forse, migliore.

Ecco alcune delle mie preoccupazioni:

  • non siamo più in grado di ottenere lo stato repository coerente con un unico comando (git checkout ora ha bisogno git submodule update --init).
  • Non siamo in grado di utilizzare correttamente alcuni degli strumenti Git (git archive è il più notevole).
  • Non siamo in grado di vedere lo stato cambia/diff in sottomoduli dal progetto principale.
  • Come ho appena trovato in modo difficile, git submodule non funziona con le opzioni --git-dir e --work-tree e richiede la modifica fisica della directory corrente al "livello superiore dell'albero di lavoro".

Sembra che per semplificare il flusso di lavoro dei sottomoduli (ovvero un'operazione == un comando) dobbiamo scrivere un wrapper piuttosto spessa su Git. Questo è triste.

Si noti che non è un'opzione per allontanarsi da Git o per unire lo sviluppo di sottoprogetti interamente nel progetto principale.

Forse sto usando git submodules in un modo sbagliato? C'è qualche buon tutorial sul flusso di lavoro?

Si prega di parlare anche se non si conosce la risposta corretta, ma condivido le mie preoccupazioni. :-)

+6

Uno dei grattacapi altro mio preferito sottomoduli è se si elimina un modulo, e sostituirlo con un nuovo modulo nella stessa posizione, si rompe il repository per tutti gli altri. (Ad esempio, qualcuno gira una libreria su github, e invece si commuta il sottomodulo in modo che punti alla forcella.) La soluzione consiste nell'eliminare il sottomodulo, far sì che tutti tirino e aggiornino, quindi sostituiscono il sottomodulo e richiamano e aggiornano tutti. –

+0

Ho pensato che qualcuno avesse rubato questo post e l'avesse pubblicato su habr senza riferimento, ma poi ho guardato il nome ... MrGreen Ancora, un riferimento a SO sarebbe bello, immagino. –

+1

Ce n'è uno.Guarda più da vicino i collegamenti nel testo. –

risposta

11

Si consiglia di provare git subtree (alt link). Ho avuto molta fortuna con questo, utilizzando sia i repository remoti che le filiali pulite (non collegate a master) nel mio progetto.

+1

Ho provato git subtree, ed è decisamente superiore a git submodule per i miei compiti. Grazie! –

+0

Il primo collegamento è rotto. So che fornisci un link alt. Ma volevo solo fartelo sapere. – Eduardo

+0

@ EduardoCereto: entrambi i collegamenti funzionano correttamente al momento. – FooF

Problemi correlati