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?
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.
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.
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
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