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 --remoteche 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 --remoteviene utilizzato.
add -be, --remotesuccessivamente, i comandi di aggiornamento, come nella documentazione di aggiornamento del sottomodulo . In tal caso, è -bdavvero ancora necessario per seguire HEAD del master?
-bviene utilizzato per generare i metadati .gitmodule giusti per il sottomodulo (è equivalente a a git config -f .gitmodules submodule.<path>.branch <branch>).
--remote: --remotefunziona anche se -bnon è 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 subtreete 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