Notre entreprise utilise actuellement un modèle de branchement simple trunk/release/hotfixes et aimerait avoir des conseils sur les modèles de branchement qui fonctionnent le mieux pour votre entreprise ou votre processus de développement.
-
Flux de travail / modèles de branchement
Voici les trois principales descriptions que j'ai vues à ce sujet, mais elles se contredisent partiellement ou ne vont pas assez loin pour résoudre les problèmes que nous avons rencontrés par la suite (comme décrit ci-dessous). Par conséquent, notre équipe a opté par défaut pour des solutions pas très bonnes. Faites-vous quelque chose de mieux ?
-
Fusionner ou rebaser (historique enchevêtré ou séquentiel)
Devrait-on
pull --rebase
ou attendre avec la fusion de retour à la ligne principale jusqu'à ce que votre tâche soit terminée ? Personnellement, je penche pour la fusion car cela préserve une illustration visuelle de la base sur laquelle une tâche a été commencée et terminée, et je préfère mêmemerge --no-ff
à cette fin. Elle présente toutefois d'autres inconvénients. En outre, beaucoup n'ont pas réalisé la propriété utile de la fusion, à savoir qu'elle n'est pas commutatif (fusionner une branche topic dans master ne signifie pas fusionner master dans la branche topic). -
Je recherche un flux de travail naturel
Parfois, des erreurs se produisent parce que nos procédures ne tiennent pas compte d'une situation spécifique avec des règles simples. Par exemple, un correctif nécessaire pour les versions antérieures devrait bien sûr être basé suffisamment en aval pour pouvoir être fusionné en amont dans toutes les branches nécessaires (l'utilisation de ces termes est-elle suffisamment claire ?). Cependant, il arrive qu'un correctif se retrouve dans le master avant que le développeur ne réalise qu'il aurait dû être placé plus en aval, et si ce correctif est déjà poussé (ou pire, fusionné ou quelque chose basé dessus), alors l'option restante est le cherry-picking, avec les périls associés. Quelles règles simples de ce type utilisez-vous ? Cela inclut également la maladresse d'une branche de sujet excluant nécessairement d'autres branches de sujet (en supposant qu'elles soient branchées à partir d'une base commune). Les développeurs ne veulent pas terminer une fonctionnalité pour en commencer une autre en ayant l'impression que le code qu'ils viennent d'écrire n'existe plus.
-
Comment éviter de créer des conflits de fusion (à cause du cherry-pick) ?
Ce qui semble être un moyen sûr de créer un conflit de fusion est de choisir entre les branches, elles ne peuvent jamais être fusionnées à nouveau ? Est-ce que l'application du même commit en revert (comment faire ?) dans l'une ou l'autre branche pourrait résoudre cette situation ? C'est une des raisons pour lesquelles je n'ose pas pousser pour un flux de travail largement basé sur la fusion.
-
Comment se décomposer en branches topiques ?
Nous réalisons qu'il serait génial d'assembler une intégration finie à partir de branches de sujets, mais souvent le travail de nos développeurs n'est pas clairement défini (parfois aussi simple que de "fouiner") et si du code a déjà été placé dans un sujet "misc", il ne peut pas en être retiré à nouveau, selon la question ci-dessus ? Comment travaillez-vous avec la définition/approvisionnement/graduation/libération de vos branches de sujet ?
-
Des procédures appropriées comme la révision du code et la graduation serait bien sûr charmant.
Mais nous n'arrivons tout simplement pas à démêler les choses pour gérer cela - des suggestions ? branches d'intégration, illustrations ?
Vous trouverez ci-dessous une liste de questions connexes :
- Quelles sont les bonnes stratégies pour permettre aux applications déployées d'être réparables à chaud ?
- Description du flux de travail pour l'utilisation de Git pour le développement interne
- Flux de travail Git pour le développement du noyau Linux en entreprise
- Comment maintenez-vous le code de développement et le code de production ? (merci pour ce PDF)
- gestion des versions git
- Flux de travail Git Cherry-pick vs Merge
- Comment sélectionner plusieurs commits
- Comment fusionner des fichiers sélectifs avec git-merge ?
- Comment choisir une série de commits et fusionner dans une autre branche ?
- Flux de travail Git ReinH
- flux de travail git pour effectuer des modifications que vous ne repousserez jamais vers l'origine
- Sélection d'une fusion
- Flux de travail Git approprié pour le code combiné OS et privé ?
- Maintenir le projet avec Git
- Pourquoi Git ne peut pas fusionner les changements de fichiers avec un parent/maître modifié.
- Bonnes pratiques de branchement / rebasage de Git
- Quand est-ce que "git pull --rebase" va me mettre dans le pétrin ?
- Comment les DVCS sont-ils utilisés dans les grandes équipes ?
Consultez également les articles de Plastic SCM sur développement axé sur les tâches et si le plastique n'est pas votre choix, étudier le modèle de ramification de nvie et son scripts de soutien .