J'ai un dépôt Git local que j'aimerais pousser vers un nouveau dépôt distant (tout nouveau dépôt mis en place sur Beanstalk, si cela importe).
Mon repo local a quelques branches et tags, et je voudrais garder toute mon histoire.
Il semble que je dois simplement faire un git push
, mais cela ne télécharge que la master
branche.
Comment puis-je tout pousser pour obtenir une réplique complète de mon dépôt local sur la télécommande?
Réponses:
Pour pousser toutes vos branches , utilisez l'une ou l'autre (remplacez REMOTE par le nom de la télécommande, par exemple "origine"):
Pour pousser tous vos tags :
Enfin, je pense que vous pouvez faire tout cela en une seule commande avec:
Cependant, en plus
--mirror
, poussera également vos télécommandes, donc ce n'est peut-être pas exactement ce que vous voulez.la source
--all
au lieu de*:*
semble plus convivialgit push REMOTE --all
est revenuNo refs in common and none specified;
sans rien faire, toutgit push REMOTE "*:*
en poussant toutes les branches à distance.git clone --mirror old-remote-url; cd repo.git; git push --mirror new-remote-url
.Dans le cas comme moi où vous avez acquis un repo et que vous changez maintenant l'origine distante vers un autre repo, un nouveau vide ...
Vous avez donc votre dépôt et toutes les branches à l'intérieur, mais vous devez toujours vérifier ces branches pour que la
git push --all
commande les pousse également.Vous devez le faire avant de pousser:
Suivi par
la source
git push '*:*'
poussé toutes les branches.git push -all
vient de pousser le maître. Je transportais un dépôt de github à bitbucket.--track remotes/$remote
au lieu de--track $remote
. Voici la ligne de commande complète:for remote in `git branch -r | grep -v master `; do git checkout --track remotes/$remote ; done
Voici une autre version de la même chose qui a mieux fonctionné dans la situation dans laquelle je me trouvais. Cela résout le problème où vous avez plusieurs télécommandes, souhaitez cloner toutes les branches de télécommande
source
en télécommandedestination
mais sans avoir à toutes les vérifier au préalable.(Le problème que j'avais avec la solution de Daniel était qu'elle refusait de retirer une branche de suivi à
source
distance si je l'avais déjà vérifiée, c'est-à-dire qu'elle ne mettrait pas à jour ma branche locale avant le push)cela poussera toutes les branches distantes
source
vers une branche principaledestination
, en effectuant éventuellement une poussée non rapide. Vous devez toujours pousser les balises séparément.la source
remote
à l'autre. Merci!git push destination +refs/remotes/source/\*:refs/heads/\*
--prune
option.--mirror
paramètre habituel que tout le monde recommande. Fonctionne parfaitement pour les scénarios où vous souhaitez simplement synchroniser deux télécommandes à des fins d'automatisation ou d'audit.C'est la manière la plus concise que j'ai trouvée, à condition que la destination soit vide. Basculez vers un dossier vide puis:
Remplacer
https://...
parfile:///your/repo
etc., le cas échéant.la source
La page de manuel de
git-push
vaut le détour. Combiné avec ce site Web, j'ai écrit ce qui suit dans mon.git/config
:Les
push = :
moyens "poussent toutes les branches" correspondantes "(c'est-à-dire les branches qui existent déjà dans le référentiel distant et ont une contrepartie locale)", tandis que lespush = refs/tags/*
moyens "poussent toutes les balises".Alors maintenant, je n'ai plus qu'à courir
git push
pour pousser toutes les branches correspondantes et toutes les balises.Oui, ce n'est pas tout à fait ce que l'OP voulait (toutes les branches à pousser doivent déjà exister du côté distant), mais cela pourrait être utile pour ceux qui trouvent cette question en recherchant "comment puis-je pousser les branches et les balises en même temps" temps".
la source
Dans mon cas, ce qui a fonctionné était.
la source
origin
est un alias pour le référentiel Git d'URL distant.Mise en miroir d'un référentiel
Créez un clone nu du référentiel.
Pousser en miroir vers le nouveau référentiel.
Supprimez le référentiel local temporaire que vous avez créé à l'étape 1.
Mise en miroir d'un référentiel contenant des objets de stockage de fichiers volumineux Git
Créez un clone nu du référentiel. Remplacez l'exemple de nom d'utilisateur par le nom de la personne ou de l'organisation propriétaire du référentiel et remplacez l'exemple de nom de référentiel par le nom du référentiel que vous souhaitez dupliquer.
Accédez au référentiel que vous venez de cloner.
Récupérez les objets Git Large File Storage du référentiel.
Pousser en miroir vers le nouveau référentiel.
Poussez les objets Git Large File Storage du référentiel dans votre miroir.
Supprimez le référentiel local temporaire que vous avez créé à l'étape 1.
L'instruction ci-dessus provient de l'aide de Github: https://help.github.com/articles/duplicating-a-repository/
la source
J'ai trouvé que les réponses ci-dessus ont encore des choses peu claires, ce qui pourrait induire les utilisateurs en erreur. Tout d'abord, il est sûr que
git push new_origin --all
etgit push new_origin --mirror
ne peut pas dupliquer toutes les branches d'origine, il suffit de dupliquer vos branches locales existantes vers votre nouvelle_origine.Voici deux méthodes utiles que j'ai testées:
1, dupliquer par clone repo nu.
git clone --bare origin_url
, puis entrez dans le dossier, et.git push new_origin_url --mirror
De cette façon, vous pouvez également utiliser lesgit clone --mirror origin_url
deux--bare
et--mirror
télécharger un dépôt nu, sans compter l'espace de travail. veuillez vous référer à ceci2, Si vous avez un dépôt git en utilisant
git clone
, ce qui signifie que vous avez un dépôt nu et un espace de travail git, vous pouvez utilisergit remote add new_origin new_origin_url
, puisgit push new_origin +refs/remotes/origin/\*:refs/heads/\*
, puisgit push new_origin --tags
De cette façon, vous obtiendrez une branche de tête supplémentaire, ce qui n'a aucun sens.
la source
Pour pousser des branches et des balises (mais pas des télécommandes):
Cela équivaudrait à combiner les options
--tags
et--all
pourgit push
, ce que git ne semble pas autoriser.la source
+refs/remotes/source/*
D' après la réponse de @Daniel, j'ai fait:
la source
| grep -v master
peut être remplacé par| sed 's/\*//'
(je suppose que vous avez exclumaster
pour éviter le petit méchant*
ajouté à la branche actuellement sélectionnée) qui vous permet d'incluremaster
et d'éviter tout problème lorsque cemaster
n'est pas votre branche actuellement sélectionnée. Désolé également pour la nécropostage, c'est juste que cette réponse m'a aidé aujourd'hui et je voulais partager ma modification si elle peut aider les autres dans ma position ...J'ai constaté qu'aucun de ces éléments ne semblait fonctionner correctement pour moi. N'hésitez pas à enflammer cela à mort, mais pour une raison quelconque, vous ne pouviez pas faire fonctionner correctement les autres options.
Le résultat escompté était un dépôt "cloné" sur une autre télécommande (c'est-à-dire de Github à un autre fournisseur):
Le problème majeur que je voyais était que toutes les succursales distantes n'étaient pas recréées dans la nouvelle télécommande. Si une commande le faisait, la nouvelle télécommande n'avait pas l'historique de la branche (c'est-à-dire que faire un
git checkout branch; git log
ne montrerait pas les validations de branche attendues).J'ai remarqué que ce
git checkout -b branchname
n'est PAS la même chosegit checkout branchname
(ce dernier étant ce dont j'avais besoin). Je remarquegit checkout --track branchname
qu'il ne semble pas tirer l'historique de la branche.Ma solution (basée sur PowerShell):
la source
La commande ci-dessous poussera toutes les branches ( y compris celles que vous n'avez jamais extraites mais présentes dans votre dépôt git, vous pouvez les voir par
git branch -a
)git push origin '*:*'
la source
J'étais en train de passer d'un service de contrôle de version à un autre et j'avais besoin de cloner tous les référentiels, y compris toutes les branches, les balises et l'historique.
Pour réaliser ci-dessus, j'ai fait ensuite:
git push origin '*:*'
Script .sh utilisé pour extraire toutes les branches du référentiel local:
la source