web-dev-qa-db-fra.com

Comment configurer un projet git pour utiliser un sous-module de référentiel externe?

J'aimerais créer un dépôt qui intègre un dépôt distant.

Par exemple, disons jQuery en tant que sous-module:

git://github.com/jquery/jquery.git

Quel serait le processus de création d'un référentiel avec jQuery en tant que sous-module et l'ajout de mon propre référentiel externe en tant que référentiel à distance.

De plus, une fois que cela est configuré, si je pousse/tire vers ma propre télécommande, l’extérieur restera-t-il intact?

201
Tom
  1. Vous avez un projet - appelez-le MyWebApp qui a déjà un dépôt github
  2. Vous souhaitez utiliser le référentiel jquery dans votre projet
  3. Vous souhaitez extraire le référentiel JQuery dans votre projet sous la forme d'un sous-module.

Les sous-modules sont vraiment très faciles à référencer et à utiliser. En supposant que vous ayez déjà configuré MyWebApp en tant que référentiel, à partir du terminal, émettez ces commandes:

cd MyWebApp
git submodule add git://github.com/jquery/jquery.git externals/jquery

Cela créera un répertoire nommé externals/jquery * et le liera au référentiel github jQuery. Il ne reste plus qu’à initier le sous-module et à lui cloner le code: 

git submodule update --init --recursive

Vous devriez maintenant avoir tout le dernier code cloné dans le sous-module. Si le repo jQuery change et que vous souhaitez extraire le dernier code, lancez à nouveau la commande submodule update. Remarque: je dispose généralement de plusieurs référentiels externes dans mes projets. Je regroupe donc toujours les dépôts dans un répertoire "externals".

Le site en ligne Pro Git Book contient de bonnes informations sur les sous-modules (et git en général) présentés de manière facile à lire. Sinon, git help submodule donnera également de bonnes informations. Ou jetez un oeil au Tutoriel Git Submodule sur le wiki git.

J'ai remarqué cette entrée de blog qui parle de sous-modules et les compare au mécanisme svn: externals de Subversion: http://speirs.org/blog/2009/5/11/understanding-git-submodules.html

* En règle générale, vous devez toujours placer vos sous-modules dans leur propre répertoire, tel que Externals. Sinon, votre répertoire de projet racine peut devenir très encombré très rapidement.

328
memmons

La plupart de ce que vous devez savoir a déjà reçu une réponse. Je ne vais donc pas m'occuper de cela. Cependant, j'ai trouvé un petit élément d'information qui manque habituellement.

Comme vous le savez, "git pull" ne mettra pas à jour les sous-modules et "git submodules update" ne téléchargera pas non plus le dernier HEAD de ces derniers.

Pour mettre à jour tous vos sous-modules vers leur dernière révision en amont, vous pouvez utiliser

git submodule foreach git pull

Si vous modifiez souvent vos sous-modules et que vous en avez beaucoup, "git foreach" deviendra inestimable.

20
WhyNotHugo

Finalement, j'ai trouvé http://github.com/evilchelu/braid cela semblait correspondre à la manière dont je m'attendais à ce que les sous-modules et les télécommandes fonctionnent

2
Tom

Je pense que la réponse @ Hugo pourrait être ce dont vous avez besoin et fonctionne bien. J'ai donc trouvé un moyen plus facile.

git submodule update --remote

C'est tout.

Donc, un workflow complet pourrait être:

git clone project-with-submodules
git submodule init
git config -l
git submodule update --remote
0
Dapaldo