2010-12-07 29 views
23

Comment lier 1 référentiel git à d'autres référentiels?Comment lier 1 référentiel git à d'autres référentiels?

Supposons que je les référentiels suivants:

/var/Common.git

/var/Project1.git

/var/Project2.git

Maintenant, je veux utiliser Common.git dans d'autres dépôts. Comment puis-je le faire ?

+0

https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial –

Répondre

37

Vous êtes probablement pour submodules:

Submodules permettent des dépôts étrangers à être intégrés dans un sous-répertoire dédié de l'arbre source, toujours pointé à commettre particulier.

Un mot clé est intégré: un clone réel de Common.git serait incorporé dans chacun des autres projets. Ceci est généralement bon lorsque vous ne le modifiez pas dans les autres projets, utilisez juste une version, et mettez à jour cette version de l'original Common.git de temps en temps. Tu ferais quelque chose comme ceci:

# add Common.git as a submodule at the path "common" inside this repo 
git submodule add /var/Common.git common 
# initialize it, clone, and check out a copy 
git submodule update --init 
# commit the addition of the submodule 
git commit 

Notez que le chemin vers le sous-module va être engagé dans votre dépôt, vous devez donc utiliser une URL accessible au public. Si vous souhaitez le personnaliser localement, vous pouvez exécuter git submodule init, modifier l'URL dans .git/config, puis exécuter git submodule update. Si vous avez d'autres questions, consultez la page de manuel ou recherchez SO; il y a beaucoup de questions sous-module ici.

Si d'autre part vous allez éditer le contenu de Common.git dans chacun des projets, vous pouvez utiliser git-subtree, qui est un wrapper amical autour des facultés de fusion de sous-arbres de git. Cela vous permettra de considérer le contenu de common.git comme un contenu suivi dans chacun des projets, tout en étant capable de séparer les validations et de les fusionner en Common.git lui-même, et de fusionner les mises à jour de Common.git dans les projets .

4

Ceci est un cas parfait pour lequel git submodule a été conçu: http://git-scm.com/docs/git-submodule

Dans le Project1 et Project2, vous ajoutez du sous-module commun. Ensuite, vous git submodule checkout

Dans le référentiel cloné, il stocke uniquement le hachage du git commun. Donc, vous git submodule init et la caisse.