J'ai vu beaucoup de conseils sur les modèles de branchement git et l'opinion la plus courante semble être que faire des changements directement sur la branche principale est une mauvaise idée.
Un de nos collègues est très heureux d'apporter des modifications directement sur la branche principale, et malgré plusieurs conversations, il ne semble pas probable que cela change.
À ce stade, je ne peux pas convaincre un collègue que c'est une mauvaise pratique de travailler directement sur le maître, mais j'aimerais comprendre les choses qui entreront en conflit avec sa façon de travailler, savoir quand je dois revoir ce problème.
version-control
git
svn
branching
linuxunil
la source
la source
Réponses:
Il y a plusieurs problèmes lorsque les validations sont directement poussées vers le master
la source
Expliquez-lui que les nouvelles fonctionnalités ont besoin de leur propre branche de développement qui peut être déployée dans un environnement de test avant d'être mise en production.
Sinon, vous êtes dans un état perpétuel de fonctionnalités à moitié terminées. Vous ne pouvez pas déployer des fonctionnalités à moitié terminées en production, donc si vous travaillez directement sur la branche principale, tout le monde doit attendre que vous terminiez votre fonctionnalité avant que les modifications de quelqu'un d'autre puissent passer en production, y compris les corrections de bogues.
L'utilisation de branches indépendantes pour les fonctionnalités signifie que chaque nouvelle fonctionnalité peut être testée et déployée indépendamment des autres.
la source
Le maître devrait être potentiellement libérable. Période. Il ne devrait pas y avoir de travail à moitié terminé dans le maître (sauf s'il est désactivé avec un indicateur de fonctionnalité)
Cela dit, j'ai vu certaines équipes compliquer leur flux.
Ne pas utiliser PR lors de l'intégration à master est une erreur car les développeurs n'auront pas le pouvoir de choisir le moment de l'intégration.
Une seule branche de développement apporte très peu de valeur. Habituellement, cela ne fait que compliquer les choses. De nombreuses branches de fonctionnalités apportent beaucoup de valeur.
Faire des branches pour chaque environnement (dev, test, prod) est une erreur. Ceci est hors de portée pour git et devrait être géré par le pipeline de versions. La même version doit être déployée dans tous les environnements, ce qui est impossible s'il existe des branches pour chaque environnement.
Si une fonctionnalité est si volumineuse qu'elle ne peut pas être effectuée en un jour ou deux, tous les travaux vers une branche de fonctionnalité doivent être dans des branches distinctes et intégrés à PR.
la source
la source
Tout d'abord, je tiens à souligner que dans git, tout
pull
est littéralement une opération de branchement et toutpush
est une fusion. Lamaster
machine d'un développeur est une branche complètement distincte de cellemaster
d'un dépôt central que vous partagez, avec un statut égal d'un point de vue technique. Je renommerai parfois ma version locale enupstream
ou quelque chose si cela convient mieux à mes besoins.Je le signale parce que de nombreuses organisations pensent qu'elles utilisent les succursales plus efficacement que votre collègue, alors qu'en réalité, elles ne font guère plus que de créer un nom supplémentaire pour une succursale en cours de route, qui ne sera de toute façon pas enregistré dans l'historique. Si votre collègue valide des fonctionnalités dans une validation atomique, il est tout aussi facile de revenir en arrière qu'une validation de fusion d'une branche de fonctionnalité. La grande majorité des branches caractéristiques doivent être de très courte durée et souvent fusionnées de toute façon.
Cela dit, les principaux inconvénients de son style de travail sont doubles. Tout d'abord, il est très difficile de collaborer sur une fonctionnalité inachevée. Cependant, il ne serait pas difficile de créer une branche uniquement aux moments où une collaboration est nécessaire.
Deuxièmement, cela rend l'examen avant la fusion très difficile. Sur ce point, vous n'avez pas vraiment besoin de le convaincre. Vous pouvez adopter un outil comme github, gerrit ou gitlab, et exiger des révisions de code de demande d'extraction et des tests automatisés réussis pour toutes les fusions. Si vous ne faites pas quelque chose comme ça, franchement, vous n'utilisez pas git à son plein potentiel, et il n'est pas étonnant que votre collègue ne voit pas ce potentiel.
la source
pull
créerait une nouvelle branche ou comment unpush
serait une opération de fusion. Au contraire, unpull
est littéralement unfetch
suivi d'unmerge
!master
comme une branche différente deorigin master
. Techniquement, ce sont des branches différentes sur deux télécommandes différentes, chacune avec sa propre histoire.pull
: Avant: deux branches pointant potentiellement vers des validations différentes - Après: deux branches pointant vers des validations équivalentes - Aucune branche créée, donc je n'appellerais pas cela une "opération de branchement". Si l'une des deux commandes, je l'appelleraispush
, car cela crée potentiellement une nouvelle branche dans la télécommande. Ce qu'il ne fait pas , c'est une fusion.D'autres réponses ont déjà mentionné divers avantages (fonctionnalités isolées, code toujours livrable sur le maître, etc.) pour travailler PAS directement sur le maître.
Pour moi, vous semblez avoir un problème différent. De toute évidence, vous n'avez pas de processus de développement, qui est accepté ou utilisé par tous vos développeurs (ou votre développeur en question ignore totalement le processus).
Avez-vous des branches de fonctionnalités qui sont fusionnées dans master ou avez-vous également des branches de versions différentes ou utilisez-vous un processus totalement différent?
"Ne pas utiliser la branche principale" n'est pas suffisant.
la source
Cela m'amène à croire qu'il y a plus de problèmes. Travailler sur master ou non fait principalement partie d'une philosophie plus large sur comment, quoi et quand vous lancez des produits.
Donc, en tandem avec un "vous ne devriez jamais travailler sur master", avez-vous des tests de fonctionnalités, testez-vous le travail les uns les autres, passez-vous en revue le code de chacun. Tests d'acceptation et d'intégration.
Si vous n'avez rien de ce qui précède et que vous le faites juste pour "faire du git", vous pourriez aussi bien travailler sur master.
la source
Il n'y a aucune "mauvaise pratique" à travailler directement sur la branche. Mais vous devez décider ce qui soutient le mieux votre processus:
Question 1: Votre maître doit-il représenter l'état de sortie actuel de votre logiciel? Ensuite, vous devez introduire une branche de développement global et fusionner le développement à la fin du développement d'une version.
Question 2: Voulez-vous avoir un processus de révision du code? Ensuite, vous devriez avoir des "branches de fonctionnalités" qui seront fusionnées en master (ou développées, si vous en avez une) via des requêtes pull.
Question 3: Est-il nécessaire de partager l'état de code intermédiaire avec d'autres développeurs qui ne devraient pas encore être publiés en production (ou test)? C'est le cas où plus d'un développeur développe une fonctionnalité. Ensuite, vous devez introduire des "branches de fonctionnalités".
la source