2010-02-24 7 views
8

J'utilise git pour gérer plusieurs copies de travail de mon code. L'idée est que je peux vérifier n'importe quelle branche, la construire et l'exécuter pour voir comment la caractéristique x de la branche correspond à l'état actuel du code.Fusionner les changements de master dans toutes les branches en utilisant Git?

La branche maîtresse de Git est la ligne réseau et les autres branches git sont des caractéristiques ou des choses que je voudrais essayer. Par conséquent, mon utilisation habituelle consiste à mettre à jour le fichier maître avec les derniers correctifs, puis à fusionner le fichier maître dans les différentes branches afin que chacun reste à jour.

Ce système fonctionne bien pour moi, sauf pour le fait que je dois vérifier une branche, fusionner le master et rincer/répéter pour les autres branches. Étant donné un système de contrôle de version comme git, je ne vois pas très bien cette mise à l'échelle étant donné que je serais enclin à engendrer beaucoup de branches au fil du temps. Je suis toujours un débutant git, donc je soupçonne qu'il peut y avoir un mécanisme de sorte que git a déjà que je pourrais manquer. Est-ce qu'il y a un? Si ce n'est pas le cas, comment peut-on changer de branche pour rester à jour?

+0

Avez-vous la mise en œuvre du code de cette question? – edi9999

+0

Non, c'était un processus plutôt manuel au début. C'était aussi quand j'étais un débutant git. J'utilise maintenant git flow, ce qui est très similaire, mais ne nécessite pas de gérer plusieurs scripts. – Carl

Répondre

5

Une possibilité (non testé moi-même) serait:

  • pour établir une prise en pension nue où vous pouvez pousser votre branche principale.
  • un post-recevoir crochet (voir githooks man page) sur cette prise en pension nue qui sera ensuite pousser maître sur chaque « fonction » vous repo voulez
  • ont un crochet après réception par repo fonction pour commencer:
    • un rebasement de votre branche de fonctionnalité au-dessus de master (bien si vous n'avez pas encore poussé votre branche de fonctionnalité ailleurs)
    • ou une fusion de master sur votre branche de fonctionnalité.

Vous aurez toujours besoin pour accéder à votre repo fonction et vérifiez si le rebasage ou la fusion ne soit pas bloqué en raison de certains conflits de fusion.

+0

Oui, je vais devoir résoudre manuellement les conflits de fusion. Merci. Je n'avais aucune idée que les hameçons existaient même. J'ai quelques lectures à faire: http://kernel.org/pub/software/scm/git/docs/githooks.html – Carl

+0

@carleeto: bon point, j'ai ajouté le lien githooks man page dans ma réponse. – VonC

+0

Cela ressemble à ce que vous proposez plusieurs référentiels au lieu de plusieurs branches. – Abizern

4

Si

  1. les branches que vous souhaitez fusionner le dernier maître engage dans ne sont pas publiés et
  2. que vous voulez tous les commits en maître d'être dans les autres branches

vous pourrait simplement les rebaser sur le maître après que le maître a été mis à jour. Ce petit script peut fonctionner si vous utilisez un shell Unix. Il rebase chaque branche sur le maître.

for BRANCH in `ls .git/refs/heads`; do git rebase master $BRANCH; done 
0

je fais ce qui suit:

for BRANCH in $(ls git/refs/heads); do git checkout $BRANCH ; git merge origin/master $BRANCH ; done

+0

Avez-vous réellement exécuté ceci? 'pour b dans $ (<.git/refs/heads); fais écho $ b; fait »n'imprime rien, donc je ne peux pas imaginer comment il pourrait faire quelque chose. – Jeff

+0

Mon mauvais, le BRANCH var pour for utilisait $ BRANCH à la place. – 3manuek

+0

Vous pouvez voir à partir du code que j'ai fourni que ce n'est pas le problème. – Jeff

Questions connexes