I sottomoduli sono il modo più semplice per ottenere ciò.
Ci sono due modi comuni di lavorare con i sottomoduli - aggiungerne di nuovi e inizializzare quelli esistenti.
Aggiunta di nuovi moduli di
Dalla radice della corsa repository locale:
git submodule add <repository> external/engage.iphone
.
Il comando add
è per quando si aggiunge inizialmente un sottomodulo al repository, a differenza di quando è stato clonato un repository con i sottomoduli esistenti). Aggiunge un altro repository che può essere su un percorso locale o remoto (ricorda che altri sviluppatori hanno bisogno di accedere a questo se si pubblica il repository!) Nel file .gitmodules nella root del repository, quindi clona il repository nella posizione specificata; external/engage.iphone
nell'esempio precedente. A questo punto hai i file del repository secondario sul tuo sistema ed è elencato come sottomodulo in entrambi i file .gitmodules, la configurazione dei repository locali.
Tuttavia potrebbe non essere l'aggiunta i moduli stessi ...
Inizializzazione moduli esistenti
Le cose cambiano un po 'se si sta clonando un repository che ha già sottomoduli aggiunto ad essa. In questa situazione il file .gitmodules avrà i sottomoduli elencati in esso con le posizioni da cui recuperarli, ma la configurazione del repository locale non ne sa nulla e i file effettivi non esistono ancora sul tuo sistema. In primo luogo è necessario inizializzare i sottomoduli:
git submodule init
Questo verrà eseguito tramite qualunque repository elencati nelle vostre .gitmodules e aggiungerli al tuo .git/config. Git ora conosce il repository, ma non ha effettivamente clonato ancora, in modo da eseguire:
git submodule update
È possibile eseguire questo comando in qualsiasi momento per aggiornare i moduli registrati, vale a dire clone quelli mancanti.
git submodule sync <submodule>
Esegui questo per aggiornare tutti i moduli di montare la testa a distanza, a meno che non è stata specificata una specifica commit quando si ha il modulo aggiunto! Specificando un sottomodulo specifico, si sincronizzerà solo quello.
In puro stile git il comando init
può essere combinato con il update
per risparmiare tempo:
git submodule update --init
.
Ovviamente, puoi sempre aggiornare manualmente i tuoi .gitmodules e .git/config una volta che hai appreso il layout che usano (simile alle sezioni branch e remote nella configurazione).
Tutte le specifiche sono disponibili nella pagina man (kernel.org version).
Grazie. Sto ricevendo questo errore ora: "Nessuna mappatura del sottomodulo trovata in .gitmodules per il percorso 'engage.iphone/Contrib/json-framework'" ... qualche idea? –
... questo accade quando eseguo "git submodule init" –
@SteveN Come è stato eseguito il comando add? E cosa ha messo nei tuoi .gitmoduli? – ghickman