La gestion de plusieurs dépôts git
Mettre en place un projet est facile à git et donc je peut référentiel de même pour un petit script. Maintenant, le problème est de savoir comment les gérer.
J'ai travailler dans plusieurs endroits avec ces référentiels. Lorsque j'ai fait les modifications apportées à certaines référentiel, je veux être en mesure de mettre à jour les dépôts dans d'autres endroits.
Donc, j'ai un répertoire avec beaucoup de dépôts en elle.
- Comment puis-je récupérer tous?
- Comment puis-je vérifier si l'une d'entre eux ont des modifications non validées?
- Comment puis-je vérifier si l'une d'entre eux ont des changements à fusionner?
Et il serait agréable d'être en mesure de le faire avec une seule commande.
La sortie doit être silencieux fait assez pour remarquer les choses à faire.
- La même question répondu pour
hg mercurial
.
Vous devez vous connecter pour publier un commentaire.
Je vous recommande fortement les multiples dépôts outil m.. J'ai l'habitude d'utiliser un custom shell script, comme recommandé par les autres pendant un certain temps, mais à l'aide de m. a les avantages suivants pour moi:
En ce qui concerne votre question sur le silence de sortie: Le niveau de détail peut être modifié en utilisant le commutateur de ligne de commande -q. Je préfère la sortie par défaut qui s'affiche pour bien unifier la sortie dans un bref résumé.
- Je utiliser les alias pour le m. de commande pour s'assurer que m. toujours à la ramasse par défaut de mon projet de liste stockée dans $HOME, et utilise 5 threads parallèles:
alias pa='find . -name .git -print -execdir git pull \;'
puis,pa
est assezJe dois dire que j'ai commencé avec la actuellement accepté de répondre (juste un tas d'aides scripts qui itérer sur les dépôts), mais dans l'ensemble, c'était un manque d'expérience pour moi.
Donc, après avoir essayé de m. repo git-submodules, j'ai trouvé chaque dépourvues d'une manière différente, donc j'ai fini par faire mon propre variante: http://fabioz.github.io/mu-repo qui est de la maturité de l'outil à ce stade, il a des flux de travail qui vous permettent de:
Noter qu'il prend en charge tous les systèmes d'exploitation où Python fonctionne 😉
gr (git-run) s'étend m.'s la fonctionnalité (uniquement pour les
git
). Je le trouve plus facile à organiser de multiples git repos à l'aide de son système de tag. Le code pourgr
n'est pas bien maintenu bien. Si vous utilisez bash, assurez-vous que vous l'utilisez avec le-t tag
au lieu de#tag
forme.Vous pouvez essayer d'utiliser repo avec une coutume
manifest.xml
fichier de spécifier l'emplacement de vos dépôts sont. Il est une partie de la documentation sur la façon de le faire.Vous pouvez également utiliser
git-sous-module(1
).gitslave est un outil qui permet d'exécuter la même commande beaucoup de dépôts par la création d'un superproject/sous-projet relation entre le super et le subs. C' (par défaut) fournit une sortie de synthèse, de sorte que vous pouvez vous concentrer sur les dépôts qui fournissent de sortie unique (utile pour git status, pas tellement utile pour git ls-files).
Il est généralement utilisé pour les projets pour lesquels vous avez besoin pour assembler plusieurs référentiels ensemble et de les garder sur la même branche ou une étiquette en même temps ou quoi que ce soit. Pour mon répertoire de (nu) référentiels j'ai juste un peu makefile qui me permet d'exécuter des commandes git, qui comme vous le voyez je utiliser, surtout pour fsck et gc:
J'utilise ce script pour exécuter facilement les commandes git dans tous mes dépôts.
Par défaut, le script va chercher les dépôts git dans ~/cm/src mais vous pouvez la remplacer par la définition de la GITREPO variable d'environnement à votre goût.
Ce script est basé sur ce script.
find . -name .git -print -execdir git pull \;
est-ce que vous pensez.Vous pouvez utiliser le
git-status-all
gem pour cela: https://github.com/reednj/git-status-allIl y a aussi une option d'extraction qui va chercher de l'origine de tous les dépôts à l'avant de l'affichage de l'état:
find . -name .git -print -execdir git status \;
est OKJ'ai écrit un outil appelé "RepoZ" qui détecte automatiquement les dépôts git dès que vous clonez ou de changer quoi que ce soit en eux, comme le passage d'une branche, par exemple.
Une fois trouvé, les référentiels sont "suivis". Qui va simplement afficher dans une liste de dépôts, y compris un dense informations de statut inspirée par posh-git. Il contient de la branche courante et d'autres trucs comme un fichier de plans et le nombre d'entrants ou sortants s'engage.
Cela aide à garder une trace de vos espaces de stockage locaux et de travail inachevé à commettre ou à pousser. En outre, vous pouvez utiliser le dépôt de la liste de navigation pour passer d'un référentiel à un autre.
"Comment puis-je récupérer tous?"
La version pour Windows offre un menu contextuel d'extraire ou de tirer un référentiel. Avec la multi-sélection, vous pouvez exécuter des actions sur plusieurs référentiels à la fois.
Toutefois, vous pouvez trouver une autre fonction très utile:
Avec Auto fetch, vous pouvez dire RepoZ pour aller chercher les télécommandes de vos dépôts git régulièrement en arrière-plan. Ces extractions ne pas entrer en collision avec votre local s'engage, bien sûr. Il n'y a pas de fusion, les tentatives comme avec
git pull
.Si quelqu'un est toujours à la recherche à ce fil s'il vous plaît checkout mon script shell appelé gitme
vous aurez besoin d'entrer manuellement votre git local repos mais j'utilise cet outil tous les jours de collaborer à plusieurs projets git sur plusieurs ordinateurs.
vous pouvez exécuter
git clone https://github.com/robbenz/gitme.git
aussi le script est affiché en dessous
Je configurer un alias dans mon ~/.bash_profile donc
alias gitme='sh /path/to/gitme.sh'
Je viens de créer un outil qui faire ce que vous voulez!
gmaster fetch
gmaster status
gmaster status
Il est appelé gitmaster: https://github.com/francoiscabrol/gitmaster
J'ai écrit ce bash simple fonction dans mon .bash_profile pour être en mesure d'exécuter git, maven, gradle, ou de toute autre commande bash dans tous les dépôts git seulement:
Cela peut être utilisé de cette façon
J'ai fait un alias de la fonction à exécuter toute commande git sur tous les référentiels disponibles dans un répertoire (de manière récursive). Vous pouvez le trouver ici: https://github.com/jaguililla/dotfiles/git
C'est le code:
Espère que cela aide 🙂
Vous devriez vérifier rgit sur le CPAN qui récursivement exécute les commandes git sur tous les dépôts dans une arborescence de répertoires.
De la documentation:
J'ai écrit une ligne de commande outil appelé gita à gérer de multiples titres. Elle montre le statut des inscrits repos côte à côte, par exemple
Il peut également déléguer commandes git/aliases partir de n'importe quel répertoire de travail.
Maintenant pour répondre à vos questions à l'aide de cet outil:
La
gita ls
commande affiche 3 symboles à côté du nom de la branche, ce qui indique+
: mise en scène des changements*
: unstaged changements_
: sans traces de fichiers/dossiersLes noms de branches sont de couleur dans les 5 façons
À installer, il suffit d'exécuter
https://github.com/wwjamieson3/envisionTools a un script bash appelé gitstat qui fait cela, et un ensemble beaucoup plus. C'est GNU et compatible mac. Il peut effectuer des extractions de télécommandes si demandé. Il montre sans traces, modifié, ajouté, supprimé et mis en scène des fichiers. Il des différences avec les télécommandes en montrant dissociées s'engage sur les télécommandes et unpushed locale s'engage. Il peut également afficher des couleurs codées résultats dans le sommaire ou détaillée de la mode et même HTML. Il utilise localiser au lieu de trouver parce que c'est infiniment plus rapide et même demande de mettre à jour votre base de données locate si il est trop vieux.
Ressemble à l'écriture d'un script pour le faire, il est assez facile. Essentiellement, il doit effectuer une itération sur les dépôts et puis utiliser les commandes comme git ls-files, git diff et git log.