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 .