J'ai configuré les télécommandes suivantes:
$ git remote
korg
rorg
Et les branches suivantes:
$ git branch -a
* (no branch)
remotes/korg/gingerbread
remotes/korg/gingerbread-release
remotes/korg/honeycomb
remotes/korg/honeycomb-mr1-release
remotes/korg/master
remotes/m/android-2.3.3_r1 -> refs/tags/android-2.3.3_r1a
remotes/m/gingerbread -> korg/gingerbread
Maintenant , je veux pousser toutes les branches éloignées de korg
larorg
télécommande. Comment je fais ça?
De préférence sans faire de branche locale pour chaque premier, si cela est évitable.
git
git-branch
git-push
git-remote
Bjarke Freund-Hansen
la source
la source
Réponses:
Un test rapide de création de référentiels temporaires montre que vous pouvez construire une refspec qui peut le faire:
Donc origine / BRANCHNAME: refs / heads / BRANCHNAME
Enregistrement de ma
rorg
télécommande:la source
git push rorg origin/one:one
(sansrefs/heads/
) à la place?refs/heads/
préfixe, vous poussez une branche distante qui n'a pas besoin d'êtreone
J'ai trouvé celui-ci:
Et il a poussé toutes mes branches distantes de korg à rorg (même sans copies locales des branches). Voir la sortie ci-dessous:
Et puis vous pouvez faire la même chose pour les
tags
ref:la source
Everything up-to-date
sur git 2.10.0 sans que rien ne se passe, tout en faisant de même sur des branches individuelles.HEAD
. Mais cela peut être supprimé.git push rorg :HEAD
git push rorg refs/tags/*:refs/tags/*
. C'est la même chosegit push rorg --tags
, mais il est bon de comprendre ce que font ces choses :)Pour compléter la réponse de patthoyt , voici un court script shell qui pousse toutes les branches d'une télécommande à une autre:
Pour résumer, pour chaque branche distante sur la télécommande source (à l'exclusion des branches "pointeur" comme HEAD), poussez cette référence vers la télécommande de destination. (Le
${a//$SRC_REMOTE\/}
bit supprime le nom de la source distante du nom de la branche, c'est-à-direorigin/master
devientmaster
.)la source
git push -u $DST_REMOTE $(for a in $(git branch --list --remote "$SRC_REMOTE/*" | grep -v --regexp='->'); do echo "$a:refs/heads/${a//$SRC_REMOTE\/}"; done)
Cela fonctionne dans Zsh
la source
Pour tout script que je vous suggère d'exécuter, il serait sage de cacher ou de valider toutes vos modifications.
J'avais besoin de pousser plusieurs branches d'une télécommande à une autre. Ces réponses exigeaient que les antennes locales existaient auparavant
Changez simplement origin1 sur la télécommande source et origin2 sur la télécommande de destination. Copiez ceci dans "remoteBranchCloner.sh" et appelez-le en utilisant "sh callBranchCloner.sh".
Il y a peut-être un meilleur moyen, qui ne fait pas plusieurs poussées.
Si vous utilisez mon code, vous souhaitez probablement utiliser la mise en cache des informations d'identification, sinon vous devez taper vos informations d'identification plusieurs fois.
Pour Windows :
Remarque: ce script est pour Linux . Si vous l' exécutez dans "git bash", le script fonctionnera, mais vous ne pouvez pas l'exécuter depuis la console native sans avoir installé quelque chose de spécial.
Pour Linux
Où [--global] signifie éventuellement ajouter --global
Si vous souhaitez configurer le suivi à distance de toutes les succursales sur une nouvelle télécommande:
Stocké en tant que fichier .sh et exécuté avec "sh filename.sh", tous les amonts seront configurés pour suivre le 'remotename' distant
la source
En raison de la
HEAD
création d' une branche supplémentaire dans la réponse précédente , le moyen le plus propre que j'ai trouvé de le faire est de cloner dans un référentiel nu, puis de pousser toutes les branches vers la télécommande comme suit:la source