web-dev-qa-db-fra.com

Différences entre le sous-module et le sous-arbre git

Quelles sont les différences conceptuelles entre l’utilisation du sous-module git et du sous-arbre?

Quels sont les scénarios typiques pour chacun?

255
Nathan H

Et si je veux que les liens pointent toujours vers le HEAD du référentiel externe?

Vous pouvez créer un sous-module pour suivre le HEAD d'une branche d'un dépôt distant de sous-module, avec:

o git submodule add -b <branch> <repository> [<path>] . (pour spécifier une branche à suivre)
o _git submodule update --remote_ qui mettra à jour le contenu du sous-module à la dernière HEAD from _<repository>/<branch>_, par défaut _Origin/master_. Votre projet principal suivra toujours les valeurs de hachage du HEAD du sous-module, même si _--remote_ est utilisé.


156
VonC

le sous-module est un lien;

le sous-arbre est une copie

296
Feng

La différence conceptuelle est la suivante:

Avec git submodules, vous voulez généralement séparer un grand référentiel en un plus petit. La manière de référencer un sous-module est de style maven - vous référencez un seul commit à partir de l'autre référentiel (sous-module). Si vous avez besoin d'une modification au sein du sous-module, vous devez créer un commit/push dans le sous-module, puis référencer le nouveau commit dans le référentiel principal, puis valider/pousser la référence modifiée du référentiel principal. De cette façon, vous devez avoir accès aux deux référentiels pour la construction complète.

Avec git subtree, vous intégrez un autre référentiel dans le vôtre, y compris son historique. Donc, après l’intégration, la taille de votre référentiel est probablement plus grande (il n’ya donc pas de stratégie pour garder les référentiels plus petits). Après l'intégration, il n'y a plus de connexion à l'autre référentiel et vous n'avez pas besoin d'y accéder à moins de vouloir obtenir une mise à jour. Cette stratégie est donc davantage destinée à la réutilisation du code et de l'historique. Personnellement, je ne l'utilise pas.

103
Niklas P

sous-module
le transfert d'un référentiel principal vers une télécommande ne pousse pas les fichiers du sous-module

sous-arbre
Pousser un dépôt principal vers une machine à distance pousse les fichiers du sous-arbre

21
Matt