Je voudrais pousser et tirer toutes les branches par défaut, y compris celles nouvellement créées.
Y at-il un paramètre que je peux définir pour cela?
Sinon, quand j’ajoute une nouvelle branche localement et que je veux la retirer du serveur, quel est le moyen le plus simple de le faire?
J'ai créé une nouvelle branche du même nom et j'ai essayé de tirer, mais cela ne fonctionne pas. Me demande pour toute la config à distance de la branche. Comment puis-je le mettre.
Le moyen le plus simple est de faire:
git Push --all Origin
Cela va pousser les balises et les branches.
Avec git moderne, vous récupérez toujours toutes les branches (en tant que branches distantes suivies dans refs/remotes/Origin/*
espace de noms, visible avec git branch -r
ou git remote show Origin
).
Par défaut (voir la documentation de la variable Push.default
config), vous appuyez sur les branches correspondantes , qui signifie que vous devez d’abord faire git Push Origin branch
pour que git Pousse toujours sur git Push
.
Si vous voulez toujours pousser toutes les branches , vous pouvez configurer Push refspec. En supposant que la télécommande s'appelle Origin
, vous pouvez utiliser git config :
$ git config --add remote.Origin.Push '+refs/heads/*:refs/heads/*'
$ git config --add remote.Origin.Push '+refs/tags/*:refs/tags/*'
ou éditez directement le fichier .git/config
afin d’obtenir le résultat suivant:
[remote "Origin"] url = [email protected]: /srv/git/repo.git fetch = + refs/heads/*: refs/remotes/Origine /* Fetch = + refs/tags/*: refs/tags /* Push = + refs/heads/*: refs/heads /* Push = + refs /tags/*:refs/tags/*
Inclure le + dans la spécification Push est probablement une mauvaise idée, car cela signifie que git fera volontiers une Push non-rapide même sans -f , et si le serveur distant est configuré pour les accepter, vous pouvez perdre l’historique.
Essayez juste ceci:
$ git config --add remote.Origin.Push 'refs/heads/*:refs/heads/*'
$ git config --add remote.Origin.Push 'refs/tags/*:refs/tags/*'
$ git config --add remote.Origin.fetch 'refs/heads/*:refs/remotes/Origin/*'
$ git config --add remote.Origin.fetch 'refs/tags/*:refs/tags/*'
J'avais utilisé les commandes ci-dessous pour migrer toutes les branches vers le nouveau référentiel.
~$ git clone --mirror <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-Origin <url_of_new_repo>
~$ git Push new-Origin master
~$ git Push new-Origin --mirror
NOTE: Je devais utiliser la commande avant-dernier (c.-à-d. appuyer en premier sur le maître) lors du clonage d'un référentiel de Atlassian Stash AWS CodeCommit (référentiel vide). Je ne suis pas sûr de la raison, mais après avoir poussé (git Push new-Origin --mirror
), la branche par défaut faisait référence à une autre branche que master
.
Si vous déplacez des branches vers un nouveau dépôt depuis un ancien et que vous n’avez PAS toutes les anciennes branches de dépôt locales, vous devez d’abord les suivre.
for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done
Ajoutez ensuite votre nouveau référentiel à distance:
git remote add bb <path-to-new-repo>
Ensuite, vous pouvez tout pousser en utilisant cette commande:
git Push -u bb --all
Vous pouvez également configurer le référentiel à l'aide des commandes git config indiquées dans les autres réponses ici si vous ne le faites pas une fois ou si vous ne souhaitez déplacer que des branches locales.
Le point important, les autres réponses uniquement Poussez toutes les branches LOCALES. Si les branches n'existent que dans un autre référentiel REMOTE, elles ne seront pas déplacées sans un suivi préalable. La boucle for présentée ici aidera à cela.
Pour voir toutes les branches sans utiliser git branch -a
, vous devez exécuter:
for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all
Maintenant, vous pouvez voir toutes les branches:
git branch
Pour pousser toutes les branches, essayez:
git Push --all
Si vous déplacez toutes les branches d’un ancien stockage vers un nouveau référentiel, vous devez configurer le suivi de chaque branche dans les branches Origin existantes, avant de passer au nouveau référentiel, sinon tous votre Les branches d'origine n'apparaîtront pas dans la nouvelle origine. Faites ceci manuellement en suivant ou en vérifiant chaque branche, ou utilisez le liner:
for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=Origin/=='` `echo $remote`; done
Cette commande d'une ligne est basée sur les versions de celle-ci dans d'autres réponses de cette page, mais est sans doute meilleure car:
Ensuite, si vous changez d'origines, remplacez le lien vers l'ancienne origine et pointez vers une nouvelle télécommande. Assurez-vous d’abord de créer la nouvelle télécommande à l’aide de l’interface graphique bitbucket/github, mais n’ajoutez aucun fichier, sinon il y aura un problème de fusion. Par exemple.
git remote set-url Origin [email protected]:YOUR/SOMEREPO.git
Maintenant, poussez. Notez que la deuxième commande est nécessaire pour pousser également les balises:
git Push -u --all Origin
git Push --tags Origin
Origin
dans la configurationUtilisez ce qui suit dans votre global gitconfig
[remote]
Push = +refs/heads/*
Push = +refs/tags/*
Cela pousse toutes les branches et toutes les balises
Origin
dans config?Si vous codez:
Origin
comme télécommande dans toutes les mises en pension. Donc, vous ne pourrez pas ajouter Origin, mais vous devrez utiliser set-url
.Origin
existe déjà (à partir du point 1). Rappelez-vous :)Selon la réponse de Jakub Narębski:
Avec git moderne, vous extrayez toujours toutes les branches (comme des branches de suivi à distance dans les espaces de noms refs/remote/Origin/*
for b in $(git branch -a | grep -v master | \
sed -e "s|remotes\/Origin\/\(.*\)|\1|g"); do git checkout $b && \
git Push Origin $b; done