Tracciamento del sottomodulo git più recente

Stiamo spostando il nostro (enorme) progetto per git e stiamo pensando di usare i sottomoduli. Il nostro piano è di avere tre teste diverse nel superproject: release, stable, latest. I lead del progetto gestiranno il rilascio e le filiali stabili. Sposteranno i sottomoduli come richiesto.

Il problema è l’ultimo capo. Vorremmo che il superproject “latest” testa tracciasse i rami master di tutti i sottomoduli (automaticamente). E sarebbe anche bello se mostrasse la storia di tutti i commit al sottomodulo.

Ho dato un’occhiata a gitslave, ma non è proprio quello che vogliamo. Eventuali suggerimenti?

Aggiornamento marzo 2013

Git 1.8.2 ha aggiunto la possibilità di tracciare i rami.

git submodule ” ha iniziato ad apprendere una nuova modalità da integrare con la punta del ramo remoto (anziché l’integrazione con il commit registrato nel gitlink del superprogetto).

 # add submodule to track master branch git submodule add -b master [URL to Git repo]; # update your submodule git submodule update --remote 

Vedi anche il tutorial di Vogella sui sottomoduli .

Vedi ” Come creare un sottomodulo esistente per tracciare un ramo ” (se avevi già un sottomodulo che desideri ora traccia un ramo)

Nota:

 git submodule add -b . [URL to Git repo]; ^^^ 

Vedi la pagina man di git submodule :

Un valore speciale di . è usato per indicare che il nome del ramo nel sottomodulo dovrebbe essere lo stesso nome del ramo corrente nel repository corrente .


Vedi commit b928922727d6691a3bdc28160f93f25712c565f6 :

submodule add : Se viene specificato --branch , registrarlo in .gitmodules

Ciò consente di registrare facilmente un submodule..branch option in .gitmodules quando aggiungi un nuovo submodule. Con questa patch,

 $ git submodule add -b   [] $ git config -f .gitmodules submodule..branch  

riduce a

 $ git submodule add -b   [] 

Ciò significa che le future chiamate a

 $ git submodule update --remote ... 

otterrà aggiornamenti dallo stesso ramo che hai usato per inizializzare il sottomodulo, che di solito è quello che vuoi.

Sottoscritto: W. Trevor King


Risposta originale (febbraio 2012):

Un sottomodulo è un singolo commit a cui fa riferimento un repository padre.
Poiché si tratta di un repository Git a parte, la “cronologia di tutti i commit” è accessibile tramite un git log all’interno di tale sottomodulo.

Quindi, affinché un genitore tenga traccia automaticamente dell’ultimo commit di un dato ramo di un sottomodulo, dovrebbe:

  • cd nel sottomodulo
  • git fetch / pull per assicurarsi che abbia gli ultimi commit sul ramo destro
  • cd torna nel repository padre
  • aggiungi e conferma per registrare il nuovo commit del sottomodulo.

gitslave (che hai già guardato) sembra essere la soluzione migliore, anche per l’operazione di commit .

È un po ‘fastidioso apportare modifiche al sottomodulo a causa della necessità di controllare il ramo del sottomodulo corretto, eseguire la modifica, eseguire il commit e quindi andare nel superproject e commettere il commit (o almeno registrare la nuova posizione del sottoprogramma modulo).

Altre alternative sono dettagliate qui .