2010-09-29 6 views
40

Je suis en train de trouver le bon workflow de cette situation:Flux de travail Git correct pour la branche de fonctionnalité partagée?

Sur la prise en pension partagée, nous avons ces branches:

-master 
-feature 

La fonction branche est un partagé branche, puisque beaucoup les développeurs travaillent ensemble sur une nouvelle fonctionnalité. Ils poussent activement leurs modifications à la branche de fonctionnalité.

J'essaie d'éviter « l'enfer des conflits » pour le jour où fonction obtient finalement fusionné de nouveau dans maître. À l'heure actuelle, je vois quelques options:

1) fusionner activement maître en fonction , et de le faire souvent. Cependant, ceci n'est pas recommandé dans les docs git, et je commence à voir pourquoi. Quand j'essaye cela, je répète les mêmes conflits encore et encore.

2) Utilisez la fonction de rebase d'une manière ou d'une autre. J'ai lu à ce sujet, mais il semble que cela ne fonctionnera pas puisque la branche fonctionnalité est réellement partagée. Tout ce qu'il faut, c'est un développeur pour faire 2 rebases, et d'autres développeurs pourraient avoir des conflits de l'histoire mésappariée.

3) Tournez la fonction branchedans une branche d'intégration, et ont les développeurs utilisent leurs propres branches fonctionnelles indépendantes avec rebasage de garder les choses sain d'esprit.

4) Quelque chose de complètement différent?

Répondre

24

Pour une branche partagée, je voudrais aller aveC# 3, et l'utiliser comme une branche "intégration" pour consolider leur travail.
Les développeurs devront utiliser rebasage pour rejouer constamment leur branche private au-dessus de feature avant réinsèrent leur travail à feature, de cette façon ils sont:

  • résoudre tout conflit de fusion localement (dans leur propre repo)
  • faire la fusion finale (de leur private branche à feature) un trivial (normalement avance rapide)

(tel que décrit dans "git rebase vs. merge" réponse)

L'idée est que, une fois feature branche doit être fusionnée dans master, plus la contribution est acceptée sur feature (la branche est « gelé »), et vous pouvez en toute sécurité rebasage sur le dessus de master premier ou fusionner directement à master.
Et puis vous commencez une nouvelle branche feature (qui peut réellement commencer en parallèle de la branche feature précédente si nécessaire)

+3

Je pense que c'est une bonne règle que le développement devrait normalement se produire sur les branches par développeur et les branches partagées devraient normalement être pour l'intégration seulement. –

+1

Je ne connais pas très bien le rebasing, je vais donc poser cette question: Dans ce scénario, les utilisateurs fusionneraient-ils leurs branches privées en une seule fois (et créeraient une nouvelle branche privée s'ils devaient faire plus de travail), ou est-il sûr pour eux de fusionner plusieurs fois avec le rebasage qu'ils font? – Ben

+1

@Ben l'idée de rebaser localement est justement de permettre plusieurs fusions: puisque vous ne publiez jamais votre branche 'private', vous pouvez la rebaser avant de fusionner votre travail en' feature' et en le poussant. Cela étant dit, si un effort de développement donné est terminé sur une branche 'private' donnée, il vaut mieux en faire une nouvelle plutôt que d'essayer de réutiliser la branche existante. L'histoire locale serait plus claire. – VonC

5

Vous pouvez utiliser rerere pour gérer les conflits de fusion que vous rencontrez plusieurs fois.

0

(je ne suis pas trop vif sur les options 1, 2 ou 3, donc je suis en train de trouver un meilleur flux de travail, je suis donc décrit ci-dessous comment je pense à aborder le problème de la personne de l'espoir me conseiller)

  1. Tournez la branche de fonctionnalité dans une file d'attente de patch en utilisant l'une des files d'attente de patch git outils.
  2. Utiliser un référentiel git distinct pour contrôler la version de la file d'attente de correctifs
  3. Utilisez les approches git habituelles pour collaborer dans la file d'attente de correctifs.

Il peut être judicieux que les utilisateurs remettent la file d'attente de correctifs dans une branche de fonctionnalité locale.

0

Git Workflow pour la branche Feature

Le processus est suit: -

Première:

git pull 
git checkout -b sprint-4 
git pull origin sprint-4 
  • commandes ci-dessus p tous les fichiers de git

  • Permet de créer une branche avec le nom sprint-4 sur notre machine locale.

  • Va tirer les fichiers du serveur vers notre branche sprint-4.

Pour chaque nouvelle fonctionnalité: -

git checkout -b <feature-branch>, example: git checkout -n fer-181 
git push -u origin <local-branch>:<remote-branch>, example git push -u  
origin fer-181:fer-181 
  • Créer une branche à distance pour cette branche locale sur le serveur.
  • Poussera les fichiers de notre branche locale vers la branche distante.

Daily: (sur votre fonction branche)

git pull 
git merge dev 
  • résoudre les conflits le cas échéant
  • faire votre travail pour la journée

    origine git push

Feature est complète:

git pull 
git merge dev 

résoudre les conflits le cas échéant

git checkout dev 
git merge <feature-branch> 
git push origin dev 
  • Les commandes ci-dessus vont fusionner des fichiers de branche principale dans notre branche fonction .
  • Résolvez les conflits dans notre branche de fonctionnalité le cas échéant.
  • Fusionner les fichiers de la branche d'entités vers la branche principale.
+2

vous finirez avec un historique inutilisable – sherpya

Questions connexes