Quali sono le differenze concettuali tra l'utilizzo di sottomodulo git e sottostruttura?
Quali sono gli scenari tipici per ciascuno?
Quali sono le differenze concettuali tra l'utilizzo di sottomodulo git e sottostruttura?
Quali sono gli scenari tipici per ciascuno?
Risposte:
Cosa succede se desidero che i collegamenti puntino sempre all'HEAD del repository esterno?
È possibile creare un sottomodulo per seguire l'HEAD di un ramo di un repository remoto sottomodulo, con:
o git submodule add -b <branch> <repository> [<path>]
. (per specificare un ramo da seguire)
o git submodule update --remote
che aggiornerà il contenuto del sottomodulo all'ultima HEAD <repository>/<branch>
, per impostazione predefinita origin/master
. Il tuo progetto principale seguirà comunque gli hash dell'HEAD del sottomodulo anche se --remote
viene utilizzato.
add -b
e, --remote
successivamente, i comandi di aggiornamento, come nella documentazione di aggiornamento del sottomodulo . In tal caso, è -b
davvero ancora necessario per seguire HEAD del master?
-b
viene utilizzato per generare i metadati .gitmodule giusti per il sottomodulo (è equivalente a a git config -f .gitmodules submodule.<path>.branch <branch>
).
--remote
: --remote
funziona anche se -b
non è stato utilizzato add
. In entrambi i casi l'aggiornamento causerà un commit nel repository principale che alloggia il sottomodulo, quindi i collegamenti non "puntano sempre all'HEAD" in modo molto automatico ... o non l'ho ricevuto, o quella affermazione meglio essere rimosso dalla risposta originale (?)
La differenza concettuale è:
Con i sottomoduli git in genere si desidera separare un repository di grandi dimensioni in uno più piccolo. Il modo di fare riferimento a un sottomodulo è in stile maven - stai facendo riferimento a un singolo commit dall'altro repository (sottomodulo). Se è necessaria una modifica all'interno del sottomodulo, è necessario effettuare un commit / push all'interno del sottomodulo, quindi fare riferimento al nuovo commit nel repository principale e quindi eseguire il commit / push del riferimento modificato del repository principale. In questo modo devi avere accesso a entrambi i repository per la build completa.
Con git subtree integri un altro repository nel tuo, inclusa la sua storia. Quindi, dopo averlo integrato, la dimensione del tuo repository è probabilmente più grande (quindi questa non è una strategia per mantenere più piccoli i repository). Dopo l'integrazione, non vi è alcuna connessione con l'altro repository e non è necessario accedervi a meno che non si desideri ottenere un aggiornamento. Quindi questa strategia è più per il riutilizzo del codice e della cronologia - personalmente non la uso.
git subtree
te puoi anche spingere - se lo desideri - giusto?
il sottomodulo che
spinge un repository principale su un telecomando non invia i file del sottomodulo
sotto-albero che
spinge un repository principale verso remoto spinge i file del sotto-albero
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master