Push Git local repo à nouveau à distance, y compris toutes les branches et les tags
J'ai un repo Git local que je voudrais pousser vers une nouvelle distance de pensions de titres (nouvelle marque pensions mis en place sur Beanstalk, si ce qui compte). Mon repo local a un peu de branches et de tags et je tiens à garder tout de mon histoire. Il ressemble en gros, j'ai juste besoin de faire un git push, mais qui ne télécharge que la branche master. Comment puis-je repousser tout si je reçois une réplique complète de mon local repo sur la télécommande?
Vous devez vous connecter pour publier un commentaire.
De pousser toutes vos succursales, utiliser (remplacer DISTANCE avec le nom de la télécommande, par exemple "origine"):
De pousser tous les tags:
Enfin, je pense que vous pouvez le faire en une seule commande avec:
Cependant, en plus
--mirror
, va également pousser vos télécommandes, de sorte que cela peut ne pas être exactement ce que vous voulez.--all
au lieu de*:*
semble plus sympathiquegit push REMOTE --all
retournéNo refs in common and none specified;
de ne rien faire., alors quegit push REMOTE "*:*
poussa toutes les branches à distance.git clone --mirror old-remote-url; cd repo.git; git push --mirror new-remote-url
.git push -u origin --mirror
a fonctionné pour moi lors d'échange à partir d'une seule télécommande pour le prochain et l'obtention de toutes mes branches que je n'avais pas localement vérifié.--mirror [...] Newly created local refs will be pushed to the remote end, locally updated refs will be force updated on the remote end, and deleted refs will be removed from the remote end.
)your remotes
et pourquoi pourrait-il être une mauvaise chose?git push REMOTE --all
seulement la pousse des branches locales à DISTANCE, oùgit push REMOTE '*:*'
pousse des branches locales et d'autres branches distantes de la télécommande. Encore une fois je ne suis pas sûr si je suis à la compréhension de ce droit, mais il y a certainement une différence entre--all
et'*:*'
git push REMOTE '*:*'
semble pousser les balises de trop, alors qu'il ressemble à--all
ne le fait pas.git push --follow-tags
etgit config --global push.followTags true
. Plus de détails: stackoverflow.com/a/3745250/9638388Dans les cas comme moi, vous avez acquis une mise en pension et sont maintenant de commutation de la télécommande d'origine vers un autre repo, un nouveau vide...
Donc, vous avez votre pension et toutes les branches à l'intérieur, mais vous avez encore besoin pour passer à la caisse ceux des branches pour le
git push --all
commande à fait pousser ceux qui sont trop.Vous devriez faire avant de vous pousser:
Suivie par
git push '*:*'
poussé toutes les branches.git push -all
juste poussé le maître. Je transporte des pensions à partir de github pour 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
git push --all
œuvres. je vous remercie.grep -v master
. J'ai commencé avec un nu-repo, et certaines pensions de titres ont plusieurs branches d'un master dans leur nom (c'est à dire maître-après).Ici est une autre de prendre sur la même chose qui a fonctionné mieux pour la situation dans laquelle j'étais. Il résout le problème où vous avez plus d'une seule télécommande, voudrais cloner toutes les branches éloignées
source
à distancedestination
mais sans avoir pour toutes les vérifier au préalable.(Le problème que j'ai eu avec Daniel solution, c'est qu'il refuserait à la caisse d'un suivi de la direction générale de la
source
à distance si j'avais déjà vérifié déjà, c'est à dire, il ne serait pas de mise à jour de ma branche locale avant la poussée)ce sera le pousser toutes les branches de distance
source
à la tête de la branche dansdestination
, éventuellement faire un non-avance rapide push. Vous devrez pousser des balises séparément.remote
à l'autre. Merci!git push destination +refs/remotes/source/\*:refs/heads/\*
refs/remotes/source/*
correspondant à latags
sous-nom, qui a ensuite créé distance les branches avec des noms commetags/version-1.0
dans la cible-référentiel, qui devaient ensuite être nettoyés. Ce problème est peut-être un de mes télécommandes, je ne sais pas.--prune
option.--mirror
paramètre tout le monde recommande. Fonctionne parfaitement pour les scénarios où vous voulez juste pour garder synchronisés deux télécommandes pour l'automatisation ou à des fins de vérification.La page de manuel pour
git-push
est intéressant à lire. Combiné avec ce site internet j'ai écrit ce qui suit dans mon.git/config
:La
push = :
signifie "pousser" adéquation entre les branches (c'est à dire des branches qui existent déjà dans le dépôt distant et ont un homologue local)", tandis quepush = refs/tags/*
signifie "pousser tous les tags".Donc je n'ai plus qu'à exécuter
git push
de pousser tous les branches et de toutes les balises.Oui, ce n'est pas tout à fait ce que l'OP voulait (toutes les branches de pousser doit déjà exister sur le côté distant), mais pourrait être utile pour ceux qui trouvent cette question alors que googler "comment faire pousser des branches et des tags à la même temps".
C'est la plus concise moyen que j'ai trouvé, à condition que la destination est vide. Basculer vers un dossier vide et ensuite:
Substitut
https://...
pourfile:///your/repo
etc. comme appropriée.Dans mon cas, ce qui a fonctionné a été.
origin
est l'alias d'URL distante dépôt Git.Miroir d'un référentiel
Créer un nu-clone du dépôt.
Miroir-pousser vers le nouveau référentiel.
Enlever les locaux temporaires de dépôt que vous avez créé à l'étape 1.
Miroir d'un référentiel qui contient Git Gros Fichier de Stockage des objets
Créer un nu-clone du dépôt. Remplacer l'exemple de nom d'utilisateur avec le nom de la personne ou de l'organisation qui possède le référentiel, et de remplacer le dépôt d'exemple nom avec le nom du dépôt que vous souhaitez dupliquer.
Naviguer vers le dépôt que vous avez cloné.
Tirer dans le dépôt Git du Grand Stockage de Fichiers objets.
Miroir-pousser vers le nouveau référentiel.
Pousser le dépôt Git du Gros Fichier de Stockage des objets à votre miroir.
Enlever les locaux temporaires de dépôt que vous avez créé à l'étape 1.
Instruction ci-dessus vient de Github Aider: https://help.github.com/articles/duplicating-a-repository/
J'ai trouvé des réponses ci-dessus ont encore certaines choses pas claires, ce qui va induire les utilisateurs en erreur. Tout d'abord, Il est sûr que l'
git push new_origin --all
etgit push new_origin --mirror
ne peut pas dupliquer toutes les branches d'origine, il vient de se dupliquer vos locaux existait branches de votre new_origin.Ci-dessous deux méthodes que j'ai testées:
1,en double par clone nu repo.
git clone --bare origin_url
, ensuite, entrez dans le dossier, etgit push new_origin_url --mirror
.De cette manière, vous pouvez également utilisergit clone --mirror origin_url
, à la fois--bare
et--mirror
va télécharger un nu repo,pas y compris l'espace de travail. veuillez vous référer cette2,Si vous avez un repo git en utilisant
git clone
, ce qui signifie que vous avez à nu repo git espace de travail, 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 manière, vous obtiendrez un extra à la tête de la branche, qui ne font pas sens.
À pousser des branches et des tags (mais pas les télécommandes):
Ce serait l'équivalent de la combinaison de la
--tags
et--all
options pourgit push
, qui git ne semble pas le permettre.+refs/remotes/source/*
Basée à @Daniel réponse que j'ai fait:
| grep -v master
peut être remplacé par| sed 's/\*//'
(je suis en supposant que vous avez exclusmaster
pour éviter les vilaines petites*
qui est ajouté à la branche sélectionnée) qui vous permet d'incluremaster
et éviter tout problème lors de lamaster
n'est pas sélectionnée de la branche. Aussi désolé pour necroposting, c'est juste que cette réponse m'a aidé aujourd'hui et je voulais partager ma modification, si cela peut aider les autres dans ma position...J'ai trouvé qu'aucun de ces semblait fonctionner correctement pour moi. Se sentir libre de cette flamme à la mort, mais pour une raison quelconque n'a pas pu obtenir d'autres options pour fonctionner correctement.
Résultat attendu était un repo "cloné" à l'autre à distance (c'est à dire à partir de Github à un autre fournisseur):
Le problème majeur que je voyais était soit toutes les branches distantes de ne pas obtenir recréé dans la nouvelle télécommande. Si une commande n', la nouvelle télécommande n'a pas l'histoire de la branche (c'est à dire faire un
git checkout branch; git log
ne pas montrer les attendus de la branche s'engage).J'ai remarqué
git checkout -b branchname
n'est PAS le même quegit checkout branchname
(le dernier étant ce dont j'avais besoin). Je remarquegit checkout --track branchname
ne semble pas tirer de l'histoire de la branche.Ma Solution (powershell base):