2622 votes

Moyen facile de tirer plus tard de toutes les submodules

Nous utilisons des submodules pour gérer un couple de grands projets qui ont des dépendances sur de nombreuses autres bibliothèques que nous avons développé. Chaque bibliothèque est séparé pensions de titres apportés dans le projet en tant que personne à charge un sous-module. Au cours du développement, on a souvent envie d'aller simplement prendre la dernière version de chaque personne à charge sous-module.

Ne git est intégré dans la commande pour ce faire? Si non, comment sur Windows fichier de commandes ou similaire qui peut le faire.

3632voto

Henrik Gustafsson Points 11755

Pour git 1.6.1 ou ci-dessus, vous pouvez utiliser quelque chose de similaire (modifié afin de répondre):

git submodule foreach git pull

Voir git-sous-module(1) pour plus de détails

719voto

Alexander Bartosh Points 2299

Si vous avez besoin de tirer des trucs pour les submodules dans votre sous-module dépôts utilisation

git pull --recurse-submodules

une fonctionnalité git appris en 1.7.3.

Mais ce ne sera pas la caisse appropriée s'engage(ceux de votre référentiel maître de points) dans submodules

À la caisse appropriée s'engage dans votre submodules vous devez les mettre à jour après le tirage à l'aide de

git submodule update --recursive

325voto

gahooa Points 38006

Nous utilisons cette. Il s'appelle git-pup:

#!/bin/bash
# Exists to fully update the git repo that you are sitting in...

git pull && git submodule init && git submodule update && git submodule status

Il suffit de le mettre dans un répertoire bin (/usr/local/bin). Si sur Windows, vous devrez peut-être modifier la syntaxe pour le faire fonctionner :)

Mise à jour:

En réponse à la remarque de l'auteur original sur le tirant dans tous les Chefs de tous les submodules -- c'est une bonne question.

Je suis assez sûr que, git n'ont pas une commande interne. Pour ce faire, vous devez identifier ce que la TÊTE est vraiment pour un sous-module. Cela pourrait être aussi simple que de dire master est la plus à jour de la branche, etc...

Suite à cela, créer un script simple qui est le suivant:

  1. vérifiez git submodule status "modifiés" référentiels. Le premier caractère de la sortie des lignes de indique ce. Si un sous-repo est modifié, vous ne voulez PAS continuer.
  2. pour chaque pensions de liste, cd dans son répertoire et lancez - git checkout master && git pull. Vérifier les erreurs.
  3. À la fin, je vous suggère d'imprimer un écran pour l'utilisateur d'indiquer l'état actuel de la submodules, peut-être les inciter à ajouter tous et de s'engager?

Je tiens à mentionner que ce style n'est pas vraiment ce que submodules ont été conçus pour. En général, vous voulez dire "LibraryX" est à la version "2.32" et va le rester jusqu'à ce que je lui dis de "mise à niveau".

C'est, en un sens, ce que vous faites avec la décrit script, mais juste plus automatiquement. Besoin de soins!

Mise à jour 2:

Si vous êtes sur une plate-forme windows, vous pouvez rechercher à l'aide de Python pour mettre en œuvre le script car il est très capable dans ces domaines. Si vous êtes sous unix/linux, alors je suggère simplement un script bash.

Besoin de précisions? Il vous suffit de poster un commentaire.

205voto

mturquette Points 1099

Henrik est sur la bonne voie. Le 'foreach' de la commande peut exécuter n'importe quel script shell. Deux options pour tirer le plus tard peut-être,

git submodule foreach git pull origin master

et,

git submodule foreach /path/to/some/cool/script.sh

Qui va itérer sur tous les initialisé submodules et d'exécuter les commandes.

151voto

zachleat Points 1402

Le suivant a fonctionné pour moi sur Windows.

git submodule init
git submodule update

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X