Question Mettre en place git pour tirer et pousser toutes les branches


Je voudrais pousser et tirer toutes les branches par défaut, y compris celles nouvellement créées.

Y a-t-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, quelle est la manière la plus simple de le faire?

J'ai créé une nouvelle branche avec le même nom et j'ai essayé de tirer mais ça ne marche pas. Me demande pour toute la config à distance de la branche. Comment puis-je le définir.


469
2017-12-16 13:09


origine


Réponses:


Le moyen le plus simple est de faire:

git push --all origin

Cela va pousser les tags et les branches.


1001
2018-05-07 08:39



Avec modernité toujours chercher toutes les branches (comme branches de suivi à distance dans refs/remotes/origin/* espace de noms, visible avec git branch -r ou git remote show origin).

Par défaut (voir la documentation de push.default variable de configuration) vous poussez branches correspondantes, ce qui signifie que vous devez d'abord faire git push origin branch pour que git le pousse toujours git push.

Si tu veux toujours pousser toutes les branches, vous pouvez configurer push refspec. En supposant que la télécommande est nommée origin vous pouvez soit utiliser git config:

$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'

ou directement éditer .git/config fichier pour avoir quelque chose comme le suivant:

[origine "à distance"]
        url = utilisateur@exemple.com: /srv/git/repo.git
        fetch = + refs / heads / *: refs / télécommandes / origine / *
        fetch = + refs / tags / *: refs / tags / *
        push = + refs / têtes / *: refs / têtes / *
        push = + refs / tags / *: refs / tags / *

139
2017-12-16 14:38



Y compris le + dans la spécification de poussée est probablement une mauvaise idée, car cela signifie que git fera heureusement une poussée non-rapide même sans -fet 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/*'

32
2018-03-08 23:28



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

REMARQUE: J'ai dû utiliser la seconde commande (c'est-à-dire appuyer sur le maître en premier) tout en clonant un repo d'Atlassian Planque à AWS CodeCommit (repo vierge). Je ne suis pas sûr de la raison, mais après avoir poussé (git push new-origin --mirror) branche par défaut faisait référence à une autre branche que master.


15
2018-02-13 09:03



Si vous déplacez des branches vers un nouveau dépôt à partir d'un ancien et que vous n'avez pas toutes les anciennes branches de repo locales, vous devrez les suivre en premier.

for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done

Ensuite, ajoutez votre nouveau dépôt à distance:

git remote add bb <path-to-new-repo>

Ensuite, vous pouvez pousser tout en utilisant cette commande:

git push -u bb --all

Ou vous pouvez configurer le repo en utilisant les commandes git config notées dans les autres réponses ici si vous ne le faites pas une seule fois ou si vous cherchez uniquement à déplacer des branches locales.

Le point important, les autres réponses ne font que pousser toutes les branches LOCALES. Si les branches n'existent que sur un autre référentiel REMOTE, elles ne bougeront pas sans les suivre en premier. La boucle for présentée ici aidera à cela.


9
2018-04-18 03:37



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

5
2018-01-15 10:14



Si vous déplacez toutes les branches vers un nouveau dépôt à partir d'un ancien, puis dans votre dépôt local, vous devez configurer le suivi de chaque branche vers les branches d'origine existantes, avant de pousser vers le nouveau repo, sinon tout vos branches d'origine n'apparaîtront pas dans la nouvelle origine. Pour ce faire manuellement en suivant ou en vérifiant chaque branche, ou utilisez le seul revêtement:

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 des versions de celle-ci dans d'autres réponses sur cette page, mais est sans doute mieux parce que:

  1. il configure correctement le suivi de branche, contrairement à certaines anciennes versions de cette commande sur cette page qui ne fournissent qu'un seul paramètre à --track et donc chaque branche finit par suivre le maître - pas bon
  2. nomme les branches locales sans le préfixe "origine /" que personnellement je ne veux pas - et est cohérent avec ce qui se passe quand vous achetez une branche normalement.
  3. ignore le maître de suivi puisque cela se produit déjà
  4. ne vérifie rien, donc c'est rapide
  5. évite de trébucher sur le -> dans la sortie de la branche git -r

Ensuite, si vous changez d'origine, remplacez le lien par l'ancienne origine et pointez vers une nouvelle télécommande. Assurez-vous de créer d'abord la nouvelle télécommande, en utilisant l'interface graphique bitbucket / github, mais n'y ajoutez aucun fichier sinon il y aura un problème de fusion. Par exemple.

git remote set-url origin git@bitbucket.org:YOUR/SOMEREPO.git

Maintenant poussez. Notez que la deuxième commande est nécessaire pour pousser les balises également:

git push -u --all origin
git push --tags origin

1
2018-03-29 06:28



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

0
2017-11-14 11:33



Solution sans codage en dur origin en config

Utilisez ce qui suit dans votre global gitconfig

[remote]
    push = +refs/heads/*
    push = +refs/tags/*

Cela pousse toutes les branches et tous les tags

Pourquoi ne devriez-vous pas hardcode origin en config?

Si vous codez:

  1. Vous allez vous retrouver avec origin comme une télécommande dans tous les repos. Donc, vous ne pourrez pas ajouter d’origine, mais vous devez utiliser set-url.
  2. Si un outil crée une télécommande avec un nom différent, toutes les configurations ne s'appliqueront pas. Ensuite, vous devrez renommer la télécommande, mais le renommer ne fonctionnera pas car origin existe déjà (à partir du point 1) rappelez-vous :)

La recherche est déjà prise en charge par git moderne

Selon la réponse de Jakub Narębski:

Avec git moderne, vous allez toujours chercher toutes les branches (comme des branches de suivi à distance dans l'espace de noms refs / remotes / origin / *


0
2018-06-18 12:25