769 votes

Pousser le dépôt Git local vers le nouveau dépôt distant, y compris toutes les branches et tous les tags.

J'ai un repo Git local que je voudrais pousser vers un nouveau repo distant (tout nouveau repo mis en place sur Beanstalk, si cela compte).
Mon repo local comporte quelques branches et balises, et je voudrais conserver tout mon historique.

On dirait que j'ai juste besoin de faire un git push mais cela ne télécharge que le master branche.

Comment puis-je pousser le tout de façon à obtenir une réplique complète de mon dépôt local sur le dépôt distant ?

1249voto

Casey Points 19286

Pour pousser toutes vos branches utilisez l'un ou l'autre (remplacez REMOTE par le nom de la télécommande, par exemple "origin") :

git push REMOTE '*:*'
git push REMOTE --all

Pour pousser tous vos tags :

git push REMOTE --tags

Enfin, je pense que vous pouvez faire tout cela en une seule commande avec :

git push REMOTE --mirror

Cependant, en plus --mirror En outre, cela poussera vos télécommandes, donc ce n'est peut-être pas exactement ce que vous voulez.

73 votes

--all au lieu de *:* semble plus amical

74 votes

Mon dieu............. j'ai déchiré tout l'internet et j'ai découvert que l'interrupteur "--all" est AAAAALLLLLLLLLLLLLLLL dont j'avais besoin !

1 votes

Pour une raison quelconque, lorsque j'utilise --mirror, mes branches locales distantes sont listées comme ayant été poussées mais n'apparaissent pas réellement dans mon dépôt. Je dois d'abord vérifier toutes les branches distantes avant d'utiliser --mirror.

222voto

Daniel Points 14150

Dans le cas où, comme moi, vous avez acquis un repo et que vous changez maintenant l'origine distante pour un repo différent, un nouveau repo vide...

Ainsi, vous avez votre repo et toutes les branches à l'intérieur, mais vous devez encore vérifier ces branches pour l'option git push --all pour les pousser aussi.

Tu devrais faire ça avant de pousser :

for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done

Suivi par

git push --all

4 votes

C'est également très utile, car je devais vérifier toutes les branches manuellement. Ce sera bien pour la prochaine fois.

16 votes

Étrangement, git push '*:*' a poussé toutes les branches. git push -all a juste poussé le maître. Je transportais le repo de Github vers Bitbucket.

4 votes

Au lieu de vérifier chaque branche, vous devriez simplement faire "git branch --track $remote". Dans les gros dépôts, vérifier une ancienne branche prend du temps.

108voto

Pieter Breed Points 2288

Voici une autre version de la même chose qui a mieux fonctionné dans la situation dans laquelle je me trouvais. Elle résout le problème lorsque vous avez plus d'un site distant et que vous souhaitez cloner toutes les branches du site distant. source à distance destination mais sans avoir à les vérifier tous au préalable.

(Le problème que j'ai rencontré avec la solution de Daniel était qu'elle refusait d'extraire une branche de suivi du fichier source à distance si je l'avais déjà vérifié, c'est-à-dire qu'il ne mettrait pas à jour ma branche locale avant le push)

git push destination +refs/remotes/source/*:refs/heads/*

Note : Si vous n'utilisez pas le CLI direct, vous devez échapper les astérisques :

git push destination +refs/remotes/source/\*:refs/heads/\*

ceci va pousser toutes les branches dans le système distant source à une branche principale dans destination en faisant éventuellement une poussée non rapide vers l'avant. Vous devez toujours pousser les balises séparément.

8 votes

+1 Cela a marché pour moi, en clonant à partir d'une remote à un autre. Merci !

4 votes

J'ai dû échapper aux astérisques : git push destination +refs/remotes/source/\*:refs/heads/\*

2 votes

Pour moi, cela a abouti à pousser une branche appelée HEAD, ce qui, je pense, n'est pas intentionnel dans ce scénario.

32voto

Michał Zalewski Points 310

Mise en miroir d'un référentiel

Créer un clone nu du référentiel.

git clone --bare https://github.com/exampleuser/old-repository.git

Poussée miroir vers le nouveau dépôt.

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git

Supprimez le référentiel local temporaire que vous avez créé à l'étape 1.

cd ..
rm -rf old-repository.git

Mise en miroir d'un référentiel qui contient des objets de stockage de fichiers volumineux Git.

Créer un clone nu du référentiel. Remplacez l'exemple de nom d'utilisateur par le nom de la personne ou de l'organisation qui possède le référentiel, et remplacez l'exemple de nom de référentiel par le nom du référentiel que vous souhaitez dupliquer.

git clone --bare https://github.com/exampleuser/old-repository.git

Naviguez vers le référentiel que vous venez de cloner.

cd old-repository.git

Tirez dans les objets de stockage de fichiers volumineux Git du dépôt.

git lfs fetch --all

Poussée miroir vers le nouveau dépôt.

git push --mirror https://github.com/exampleuser/new-repository.git

Poussez les objets Git Large File Storage du dépôt vers votre miroir.

git lfs push --all https://github.com/exampleuser/new-repository.git

Supprimez le référentiel local temporaire que vous avez créé à l'étape 1.

cd ..
rm -rf old-repository.git

Les instructions ci-dessus proviennent de l'aide Github : https://help.github.com/articles/duplicating-a-repository/

29voto

ta.speot.is Points 15157

C'est le moyen le plus concis que j'ai trouvé, à condition que la destination soit vide. Passez à un dossier vide et ensuite :

# Note the period for cwd >>>>>>>>>>>>>>>>>>>>>>>> v
git clone --bare https://your-source-repo/repo.git .
git push --mirror https://your-destination-repo/repo.git

Substitut https://... para file:///your/repo etc., selon le cas.

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