710 votes

Configurer git pour tirer et pousser toutes les branches

J'aimerais que toutes les branches soient poussées et tirées par défaut, y compris les branches nouvellement créées.

Existe-t-il un paramètre que je peux définir ?

Sinon, lorsque j'ajoute une nouvelle branche, localement, et que je veux l'extraire du serveur, quelle est la façon la plus simple de le faire ?

J'ai créé une nouvelle branche avec le même nom et j'ai essayé de tirer mais cela ne fonctionne pas. Il me demande toute la configuration à distance de la branche. Comment faire ?

4 votes

"et j'ai essayé de tirer mais ça ne marche pas". Détails s'il vous plaît. Montrez-nous quelle commande vous avez essayé d'utiliser.

1492voto

brimble2010 Points 3781

La manière la plus simple est de le faire :

git push --all origin

Cela va pousser les tags et les branches.

13 votes

Parmi les dizaines de réponses que j'ai trouvées sur SO et d'autres endroits, c'est la façon la plus simple de pousser une branche locale nouvellement créée, sans toucher à la configuration. Merci de votre compréhension.

191 votes

Et si vous ajoutez -u une fois, par exemple git push --all origin -u , le suivi est mis en place et vous pouvez ensuite simplement utiliser git push .

28 votes

Pour la version 1.7.12.3 de git, j'ai dû utiliser git push --tags origin pour pousser toutes les étiquettes.

150voto

Jakub Narębski Points 87537

Avec git moderne, vous toujours chercher toutes les branches (en tant que branches de suivi à distance dans refs/remotes/origin/* visible avec git branch -r o git remote show origin ).

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

Si vous voulez toujours pousser toutes les branches vous pouvez mettre en place un push refspec. En supposant que la télécommande soit 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 modifier directement .git/config pour obtenir quelque chose comme ce qui suit :

\[remote "origin"\]
        url = user@example.com:/srv/git/repo.git
        fetch = +refs/heads/\*:refs/remotes/origin/\*
        fetch = +refs/tags/\*:refs/tags/\*
        push  = +refs/heads/\*:refs/heads/\*
        push  = +refs/tags/\*:refs/tags/\*

3 votes

@Merc : git push --all origin permet de publier en une seule fois toutes les branches et tous les tags, bien que la sémantique par défaut jusqu'à la version actuelle "correspondant" signifierait que vous pousseriez toutes les branches par la suite... à moins que vous n'ajoutiez une nouvelle branche ou un nouveau tag. Les réglage a "pousser [...] toutes les branches par défaut" est ainsi rédigée.

0 votes

Vous pourriez améliorer la réponse en ajoutant la façon de reconfigurer Git de cette manière. Ceci est utile pour les utilisateurs ayant choisi le mode simple.

3 votes

Ceci a changé depuis git 2.0. La poussée par défaut est simple, elle ne correspond plus.

34voto

Mark Reed Points 271

Inclure le + dans la spécification de push est probablement une mauvaise idée, car cela signifie que git fera volontiers un push non rapide. même sans -f et si le serveur distant est configuré pour les accepter, vous pouvez perdre l'historique.

Essayez 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/*'

0 votes

Vous pouvez également ajouter le --global à chacun d'entre eux pour en faire la valeur globale par défaut pour tous vos dépôts.

0 votes

Il est regrettable que le + soit ajouté automatiquement par git lorsque l'on fait git remote add .

33voto

vikas027 Points 2101

J'ai utilisé les commandes suivantes pour migrer toutes les branches vers le nouveau dépôt.

~$ 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 : J'ai dû utiliser l'avant-dernière commande (i.e. push master first) lors du clonage d'un repo depuis Atlassian. Réserve à l'AWS CodeCommit (repo vierge). Je ne suis pas sûr de la raison, mais après avoir poussé ( git push new-origin --mirror ) la branche par défaut se référait à une autre branche que la branche master .

14voto

Si vous déplacez des branches d'un ancien repo vers un nouveau repo et que vous n'avez PAS toutes les branches de l'ancien repo en local, vous devrez d'abord les suivre.

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

Ajoutez ensuite votre nouveau repo distant :

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

Vous pouvez ensuite les pousser tous à l'aide de cette commande :

git push -u bb --all

Vous pouvez également configurer le repo en utilisant les commandes git config mentionnées dans les autres réponses ici si vous ne faites pas cela une seule fois ou si vous ne cherchez qu'à déplacer des branches locales.

Le point important, c'est que les autres réponses ne poussent que toutes les branches LOCALES. Si les branches n'existent que sur un autre dépôt à distance, elles ne seront pas déplacées sans les avoir suivies au préalable. La boucle for présentée ici permet d'y remédier.

0 votes

BTW, j'utilise "bb" à la place de "origin" ici parce que je suppose que votre dépôt original/ancien était nommé "origin" et qu'il est probablement encore attaché à cette étiquette. "bb" est pour Bitbucket, où j'ai déplacé mon dépôt original, mais vous pouvez l'appeler quelque chose de plus approprié comme "neworigin" si vous préférez.

4 votes

Cela n'a pas fonctionné pour moi. Je me suis retrouvé avec toutes les branches distantes qui suivaient la même branche locale :/

4 votes

AFAIK cela ne devrait pas fonctionner, comme l'indique le commentaire de @jhsowter. la bonne commande pour moi pour suivre une branche distante dans un repo nouvellement cloné est git branch --track reponame origin/reponame sinon vous obtiendrez toutes les branches distantes suivies sur la branche locale actuelle

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