155 votes

Git push branch d'une télécommande à une autre ?

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 souhaite pousser toutes les branches distantes de korg vers la télécommande rorg Comment je fais ça?

De préférence sans créer de branche locale pour chaque premier, si cela est évitable.

250voto

radistao Points 1070

J'ai trouvé celui-ci :

 git push rorg 'refs/remotes/korg/*:refs/heads/*'

Et il a poussé toutes mes branches distantes de korg à rorg (même sans copies locales des branches). Voir la sortie ci-dessous :

 Counting objects: 293, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (67/67), done.
Writing objects: 100% (176/176), 48.32 KiB, done.
Total 176 (delta 105), reused 168 (delta 97)
remote: Resolving deltas:  11% (12/105)
To <<MY_REPOSITORY_URL>>
 * [new branch]      korg/gingerbread-> gingerbread
 * [new branch]      korg/gingerbread-release -> gingerbread-release
 * [new branch]      korg/honeycomb-> honeycomb
 * [new branch]      korg/HEAD -> HEAD
 * [new branch]      korg/honeycomb-mr1-release-> honeycomb-mr1-release
 * [new branch]      korg/master -> master

Et puis vous pouvez faire la même poussée pour les références tags

 git push rorg 'refs/tags/*:refs/tags/*'

59voto

patthoyts Points 8978

Un test rapide de création de référentiels temporaires montre que vous pouvez construire une spécification de référence qui peut faire cela :

 $ git push rorg origin/one:refs/heads/one
Counting objects: 5, done.
Writing objects: 100% (3/3), 240 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /tmp/rorg
 * [new branch]      origin/one -> one

Donc origin/BRANCHNAME:refs/heads/BRANCHNAME

Enregistrement de ma télécommande rorg

 pat@host /tmp/rorg (BARE:master)
$ git graph --all
* 5750bca (HEAD, master) c
| * 13fd55a (one) b
|/
* 822e0de a

14voto

blahdiblah Points 17382

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 :

 SRC_REMOTE=korg
DST_REMOTE=rorg
for a in $(git branch --list --remote "$SRC_REMOTE/*" | grep -v --regexp='->')
  do git push "$DST_REMOTE" "$a:refs/heads/${a//$SRC_REMOTE\/}"
done

Pour résumer, pour chaque branche distante sur la télécommande source (à l'exception des branches "pointeur" comme HEAD), poussez cette référence vers la télécommande de destination. (Le ${a//$SRC_REMOTE\/} supprime le nom distant source du nom de la branche, c'est-à-dire que origin/master devient master .)

7voto

zhudongfang Points 194

Cela fonctionne en Zsh

Notez que le guillemet simple est nécessaire pour éviter une expansion inattendue des paramètres dans certains cas.

 git push rorg 'refs/remotes/korg/*:refs/heads/*'

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