2010-08-25 6 views
1

Quelle est la méthode tout-en-un (ou du moins plus facile) pour y parvenir? Fondamentalement je veux créer une branche mais l'ai suivi afin que je puisse pousser des changements, en tant que sauvegarde, à un repo central.Git Remote Suivi des branchements

git branch BranchName 
git push origin BranchName 
git -d BranchName 
git branch --track BranchName origin/BranchName 

Je l'ai fait un tas de google & SO recherches mais je suis confus par les descriptions normales de la création de succursales à distance et de les suivre.

+0

Si tout se passe au pire, vous pouvez simplement créer un script bash et l'utiliser comme votre "moyen plus facile" – Jasper

+0

Je pensais à cela aussi, et était prêt à faire quelque chose comme 'git branche $ 1 && git push origine $ 1 && git -d $ 1 ... 'mais en changeant le push par défaut de tracking à current et en poussant juste la branche dans laquelle je suis (selon @jefromi) c'était ce que je cherchais. – Hans

Répondre

7

L'utilisation normale pour le suivi des branches est telle que vous pouvez les récupérer. Si vous voulez pousser à une télécommande pour la sauvegarde, vous voulez probablement toutes vos succursales là-bas, oui? Donc, vous pouvez le faire:

git config remote.backup.mirror true 

Ensuite, chaque fois que vous exécutez git push backup, il sera renvoyé par défaut au comportement de git push --mirror backup, qui pousse tous refs (pas seulement toutes les branches - tous les tags, toutes vos autres branches à distance, tout).

Si vous ne voulez pas aller jusque-là, vous pouvez toujours faire:

git push --all backup 

Ça va pousser toutes les branches, mais pas le reste de votre refs.

Enfin, si vraiment vous ne voulez juste pousser une branche ... eh bien, pour l'essentiel, vous devriez toujours le faire simplement:

git push origin backup-branch 

La seule façon que vous pourriez le rendre plus court est juste rendre l'opération par défaut effectuée par git push, si vous voulez vraiment. Il existe quatre options pour le comportement de git push sans argument:

  • rien ne pas pousser quoi que ce soit.
  • correspondant à pousser toutes les branches correspondantes. Toutes les branches ayant le même nom aux deux extrémités sont considérées comme correspondant. C'est la valeur par défaut.
  • suivi Poussez la branche en cours vers sa branche amont.
  • actuelle Poussez la branche en cours vers une branche du même nom.

Vous pouvez définir votre préféré un avec git config push.default <value>. Si vous le modifiez à tracking, la configuration de votre branche de sauvegarde en tant que branche de suivi vous permet de la pousser sans arguments, mais seulement si elle est déjà extraite. Et cela vous évitera d'utiliser git push pour pousser plusieurs branches à la fois (le comportement par défaut, ce qui est vraiment sympa). Donc, si vous voulez vraiment le faire de cette façon, vous devrez en effet configurer votre branche comme une branche de suivi. Vous pouvez raccourcir la façon dont vous avez fait un peu:

git branch backup-branch 
git push origin backup-branch 
# most elegant way: 
git branch --set-upstream backup-branch origin/backup-branch 
# or this: 
# git branch -f backup-branch origin/backup-branch 
# or this: 
# git config branch.backup-branch.remote origin 
# git config branch.backup-branch.merge refs/heads/backup-branch 
+0

Salut encore @Jefromi, merci d'avoir pris le temps de m'aider avec git. Quelqu'un doit pousser à une branche éloignée pour que je la tire, non? J'ai deux raisons de le faire a) sauvegarder b) partager avec des collègues. – Hans

+0

Si je change la valeur par défaut 'current', alors 'git checkout -b branchname' a fait quelques modifications puis 'git push' cela mettrait automatiquement cette branche sur l'origine distante? Je vais essayer. – Hans

+0

Yup, merci. "courant" était exactement ce dont j'avais besoin. – Hans

1

J'ai utilisé ce site http://git-wt-commit.rubyforge.org/git-publish-branch pour mon propre usage (après beaucoup de recherche sur la pile).

Le processus est descendu à:

git branch *branchname* 
git push origin *branchname* 
git config branch.*branchname*.remote origin 
git config branch.*branchname*.merge *branchname* 

Mon cas était assez basique, mais si vous creusez à travers le code dans le lien, je suis sûr que ce sera utile pour les cas les plus complexes.