Le court: existe-t-il un moyen d'avoir un git repo push to et pull from a remote of remote repos (plutôt qu'une seule "origine")?
Le long: J'ai souvent une situation où je développe une application sur plusieurs ordinateurs, avec une connectivité différente - disons un ordinateur portable pendant le transport, un ordinateur "A" pendant que je suis dans un certain endroit et un autre ordinateur "B" tandis que sur un autre. En outre, l'ordinateur portable peut avoir une connectivité avec uniquement "A" ou "B", et parfois les deux.
Ce que je voudrais, c'est que git "tire" et "pousse" toujours vers tous les ordinateurs auxquels il peut actuellement se connecter, il est donc plus facile de passer d'une machine à l'autre et de continuer à travailler de manière transparente.
git
, est incluse dans la réponse de Malvineous ci-dessous . La réponse acceptée est incorrecte.Réponses:
Vous pouvez configurer plusieurs référentiels distants avec la
git remote
commande:Pour récupérer à partir de toutes les télécommandes configurées et mettre à jour les branches de suivi, mais sans les fusionner
HEAD
, procédez comme suit :S'il n'est pas actuellement connecté à l'une des télécommandes, cela prendra du temps ou lancera une erreur, et passera à la suivante. Vous devrez fusionner manuellement à partir des référentiels récupérés ou
cherry-pick
, selon la façon dont vous souhaitez organiser la collecte des modifications.Pour récupérer la branche principale d'Alt et la tirer dans votre tête actuelle, procédez comme suit:
Donc, en fait,
git pull
c'est presque un raccourci pourgit pull origin HEAD
(en fait, il regarde dans le fichier de configuration pour le déterminer, mais vous avez l'idée).Pour pousser les mises à jour, vous devez le faire manuellement pour chaque dépôt.
Une poussée a été, je pense, conçue avec le flux de travail du référentiel central à l'esprit.
la source
Faire cela manuellement n'est plus nécessaire , avec les versions modernes de
git
! Voir la solution de Malvineous ci-dessous.Reproduit ici:
Réponse originale:
C'est quelque chose que j'utilise depuis un bon moment sans conséquences graves et suggéré par Linus Torvalds sur la liste de diffusion git .
La solution de araqnid est la bonne pour introduire du code dans votre référentiel ... mais lorsque vous, comme moi, avez plusieurs équivalents faisant autorité en amont (je garde certains de mes projets les plus critiques clonés à la fois vers un amont privé, GitHub et Codaset), il peut être une douleur de pousser des changements à chacun, chaque jour.
Longue histoire courte,
git remote add
toutes vos télécommandes individuellement ... puisgit config -e
ajoutez une télécommande fusionnée. En supposant que vous ayez ce référentielconfig
:... pour créer une télécommande fusionnée pour
"Paws"
et"Codaset"
, je peux ajouter ce qui suit après tout cela:Une fois que j'ai fait cela, quand je le ferai
git push Origin Master
, cela ira aux deuxPaws/Master
etCodaset/Master
séquentiellement, ce qui facilitera un peu la vie.la source
git config -e
ouvre le.git/config
fichier dans votre éditeur préféré.git
la ligne de commande de 'supporte cela nativement, avecgit remote set-url ... --add
.[branch "Master"]
définiremote = Origin
etgit pull
utilisera les deux télécommandes.Depuis git 1.8 (octobre 2012), vous pouvez le faire depuis la ligne de commande:
Ensuite
git push
, poussera vers user1 @ repo1, puis poussera vers user2 @ repo2.la source
git fetch
. (Compte tenu de cela, je ne comprends pas ce que le but degit remote set-url --add
peut être sans--push
.)J'ai ajouté ces alias à mon ~ / .bashrc:
la source
git config alias.pushall '!for i in
git remote; do git push $i; done;'
alias pushall='for i in `git remote`; do echo "Pushing to " $i; git push $i; done;'
Vous pouvez ajouter des télécommandes avec:
Ensuite, pour mettre à jour tous les dépôts:
la source
Voici mon exemple avec le script bash dans la
.gitconfig
section aliasla source
J'ai ajouté deux pushurl séparés à l '"origine" distante dans le fichier congfig .git. Quand je cours
git push origin "branchName"
, il passe par et passe à chaque URL. Je ne sais pas s'il existe un moyen plus facile d'accomplir cela, mais cela fonctionne pour moi-même pour pousser vers le code source Github et pour pousser vers le code source My.visualStudio en même temps.la source
J'ai pris la liberté d'élargir la réponse de nona-urbiz; ajoutez simplement ceci à votre ~ / .bashrc:
Usage:
Si vous ne fournissez aucun argument de branche pour git-pullall, alors l'extraction à partir de télécommandes autres que par défaut échouera; laissé ce comportement tel quel, car il est analogue à git.
la source
Vous aurez besoin d'un script pour les parcourir. Git ne propose pas de «pousser tout». Vous pourriez théoriquement faire un push dans plusieurs threads, mais une méthode native n'est pas disponible.
La récupération est encore plus compliquée, et je recommanderais de le faire de manière linéaire.
Je pense que votre meilleure réponse est d'avoir une seule machine à laquelle tout le monde fait un push / pull, si c'est possible.
la source
Pour la mise à jour des télécommandes (c'est-à-dire le
pull
cas), les choses sont devenues plus faciles.La déclaration de Linus
dans l'entrée référencée de la liste de diffusion Git dans la réponse d'elliottcable n'est plus vraie.
git fetch
appris le--all
paramètre quelque part dans le passé permettant de récupérer toutes les télécommandes en une seule fois.Si tous ne sont pas demandés, on pourrait utiliser le
--multiple
commutateur afin de spécifier plusieurs télécommandes ou un groupe.la source
Je voulais travailler dans VSO / TFS, puis pousser publiquement vers GitHub lorsque je suis prêt. Repo initial créé dans VSO privé. Quand est venu le temps d'ajouter à GitHub, j'ai fait:
A travaillé comme un champion ...
Pour un contrôle d'intégrité, lancez "git remote -v" pour répertorier les référentiels associés à un projet.
Manière simple, a fonctionné pour moi ... J'espère que cela aide quelqu'un.
la source
git push -f
sans raison, par exemple l'échec degit push
ou savoir exactement ce que l'on fait, est une mauvaise idée et potentiellement nuisible. Cela ne répond pas non plus à la question, mais comment ajouter une deuxième télécommande.ajoutez un alias à gitconfig global (/home/user/.gitconfig) avec la commande ci-dessous.
Une fois que vous avez validé le code, nous disons
pour pousser à l'origine par défaut. Après l'alias ci-dessus, on peut dire
et le code sera mis à jour pour toutes les télécommandes, y compris la télécommande d'origine.
la source
Ajout du
all
télécommande devient un peu fastidieux car vous devez configurer sur chaque machine que vous utilisez.Également
bash
git
alias et fournis supposent tous que vous disposerez de toutes les télécommandes. (Ex: j'en ai une fourchettesshag
que je conserve sur GitHub et GitLab. J'ai l' amont télécommande en ajoutée, mais je n'ai pas la permission d'y pousser.)Voici un
git
alias qui ne pousse que vers les télécommandes avec une URL push qui inclut@
.la source
la source