ultimo monitoraggio del sottomodulo git


136

Stiamo spostando il nostro (enorme) progetto su git e stiamo pensando di usare i sottomoduli. Il nostro piano è di avere tre teste diverse nel superprogetto: rilascio, stabile, ultimo. I responsabili del progetto gestiranno il rilascio e rami stabili. Sposteranno i sottomoduli come richiesto.

Il problema è la testa "più recente". Vorremmo che la testa "più recente" del superprogetto monitorasse i rami principali di tutti i sottomoduli (automaticamente). E sarebbe anche bello se mostrasse la storia di tutti i commit nel sottomodulo.

Ho guardato gitslave, ma non è proprio quello che vogliamo. Eventuali suggerimenti?


Mentre hai chiesto uno strumento, voglio solo collegare questa domanda che raccoglie le linee di risposta che fanno la stessa cosa: stackoverflow.com/questions/1030169/…
Tobu

Git ora offre il monitoraggio delle ultime novità con i sottomoduli: vedi la mia risposta modificata.
VonC,

Risposte:


235

Aggiornamento marzo 2013

Git 1.8.2 ha aggiunto la possibilità di tenere traccia dei rami.

" git submodule" ha iniziato ad apprendere una nuova modalità da integrare con la punta del ramo remoto (invece di integrarsi 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 

Se tu avessi un modulo già presente ora che tu voglia sarebbe traccia di un ramo, vedere " come creare un modulo esistente traccia un ramo ".

Vedi anche il tutorial di Vogella sui sottomoduli per informazioni generali sui sottomoduli.

Nota:

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

Vedi la git submodulepagina man :

Un valore speciale di .viene utilizzato per indicare che il nome del ramo nel sottomodulo deve avere lo stesso nome del ramo corrente nel repository corrente .


Vedi commit b928922727d6691a3bdc28160f93f25712c565f6 :

submodule add: Se --branchviene fornito, registralo.gitmodules

Ciò consente di registrare facilmente submodule.<name>.branchun'opzione .gitmodulesquando si aggiunge un nuovo sottomodulo. Con questa patch,

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

riduce a

$ git submodule add -b <branch> <repository> [<path>]

Ciò significa che il futuro chiama

$ git submodule update --remote ...

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

Autografato da: W. Trevor King


Risposta originale (febbraio 2012):

Un sottomodulo è un singolo commit a cui fa riferimento un repository principale.
Dal momento che è un repository Git da solo, la "storia di tutti i commit" è accessibile attraverso un git logsottomodulo.

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

  • cd nel sottomodulo
  • git fetch / pull per assicurarsi che abbia gli ultimi commit sul ramo giusto
  • cd nel repository principale
  • aggiungere e eseguire il commit per registrare il nuovo commit del sottomodulo.

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

È un po 'fastidioso apportare modifiche al sottomodulo a causa della necessità di effettuare il checkout sul ramo del sottomodulo corretto, apportare la modifica, eseguire il commit e quindi passare al superproject e eseguire il commit (o almeno registrare la nuova posizione del modulo).

Altre alternative sono dettagliate qui .


1
@BraveNewMath è necessario checkout il ramo di destra nel vostro modulo, poi vai al tuo repo genitore e digitare: git config -f .gitmodules submodule.<path>.branch <branch>. Aggiungi tutto, impegna e invia.
VonC,

2
@BraveNewMath I dettagli di tutti i passaggi per fare in modo che un sottomodulo segua un ramo in stackoverflow.com/a/18799234/6309 .
VonC,

1
È importante utilizzare il --remotetag se non si desidera ottenere head separati durante l'aggiornamento, chiedendosi perché sembra che il codice appena estratto sia dietro master!
Chris Watts,

3
@DC_ Sono d'accordo con "questa risposta" (da quando l'ho scritta). La funzione "seguire un ramo" ha lo scopo di aggiornare un sottomodulo all'ultimo commit di un ramo. Una volta fatto ciò, dovrai comunque aggiungere e impegnare il nuovo stato del sottomodulo nel repository principale. E il prossimo clone verificherà quello stato (senza testa).
VonC,

3
@VonC Quindi, per chiarire ulteriormente, la funzione "seguire un ramo" influenza solo il comportamento del git submodule updatecomando indicando a quale commit (ovvero il commit più recente sul master) a cui aggiornare il sottomodulo, non causando automaticamente l'aggiornamento del repository principale commit è indicato dal sottomodulo al momento del clone?
christner,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.