J'ai vu des branches de développeurs utilisées dans deux scénarios principaux:
La communauté open source, où ces branches sont en fait des fourchettes de référentiel, afin que les responsables de projet puissent verrouiller l'accès au référentiel maître et nécessiter une intégration via des demandes d'extraction. Cela rend la vie plus difficile pour les contributeurs, mais beaucoup plus facile pour les responsables, ce qui est bien sûr exactement le point, et c'est un modèle très réussi sur GitHub.
Des équipes et des organisations qui n'ont pas d'intégration continue et qui ont un historique d'instabilité dans leurs déploiements, ou pire, d'instabilité dans leurs builds. Ces équipes essaient généralement d'utiliser les branches de développement pour protéger la stabilité de la ligne principale, et le résultat est - généralement - une période de fusion longue et très douloureuse avant la sortie, suivie d'une période de stabilisation encore plus longue et plus douloureuse, qui parfois n'arrive qu'après la sortie.
Je ne veux pas que ce soit une diatribe sur la raison pour laquelle vous avez besoin de CI, mais il est clair à partir de votre question que vous savez que vous n'intégrez pas vos changements assez souvent, donc OMI, il est inutile de danser autour du problème.
À moins que vous ne travailliez réellement dans une équipe distribuée géographiquement avec un besoin de «filtrer» les changements des développeurs externes, le modèle de branche par développeur n'a vraiment pas beaucoup de sens. Cela n'a surtout pas de sens avec git, car chaque développeur a déjà techniquement son propre référentiel. La plupart des organisations devraient intégrer très fréquemment - comme dans, plusieurs fois par jour.
Je fais actuellement partie d'un groupe d'environ 35 contributeurs répartis en 4 équipes distinctes, la plupart des gens s'enregistrent au moins 2-3 fois par jour, certaines personnes 10-15 fois; il est inhabituel de voir des versions cassées et extrêmement rares pour elles de rester cassées pendant plus de quelques minutes. Git gère les fusions si facilement la plupart du temps que les branches de développeurs distantes ne sont que des frais généraux inutiles. Tirez, fusionnez localement et exécutez des tests de validation avant de pousser, c'est simple.
Si vous devez absolument différer l'intégration afin de protéger la stabilité de la branche principale, le modèle typique et éprouvé consiste à utiliser une branche instable - parfois appelée branche de développement , comme décrit dans Un modèle de branchement Git réussi . Si les développeurs ne parviennent pas à fusionner avec succès dans cette branche (qui n'a besoin que de se construire , pas de fonctionner correctement) au moins une fois par jour, alors vous avez un problème de qualité / discipline et pas un problème de contrôle des révisions; le couvrir en utilisant des branches de développeur non intégrées ne fait que différer le problème et, ce faisant, rend les éventuelles fusions beaucoup plus douloureuses et instables qu'elles ne le devraient vraiment.
Les branches de fonctionnalités ne sont pas les pires, mais très peu de projets de l'OMI sont en fait assez grands pour les justifier; si votre projet est très volumineux (c'est-à-dire que des tonnes de fonctionnalités sont travaillées en même temps), vous obtiendrez de meilleurs résultats en le divisant en composants autonomes séparés que vous ne le constaterez en résolvant le problème avec le contrôle de source.
Vous pouvez ignorer ce conseil si vous le souhaitez, et de nombreuses équipes le font, mais l'une des raisons pour lesquelles le modèle de branchement lié ci-dessus est si populaire et réussi est qu'il est conçu pour fonctionner avec une intégration continue, et non contre lui.
Dans votre branche de travail si vous allez:
vous pouvez également fusionner à partir de la branche des autres développeurs
Ce que cela fera, c'est de fusionner les modifications de master dans votre branche de développement.
la source
git merge master
alors que sur la branche des fonctionnalités extraites, c'est ce que je cherchais. MerciSi dev-A et dev-B sont des branches différentes pour un projet différent, alors ce que @scaryrawr a répondu serait le mieux.
Mais si dev-A et dev-B sont en fait exactement le même code (même projet), alors une alternative serait que les deux travaillent sur l'une des branches. Par exemple, vous créez un branchement maître appelé «devWork». Vous extrayez tous les deux devWork, travaillez dessus, validez et envoyez des modifications. Les modifications poussées ne seraient pas sur Master mais dans devWork, alors les autres utilisateurs de la branche doivent simplement faire un PULL localement pour obtenir les modifications poussées.
Vous pouvez ensuite suivre les méthodes standard pour effectuer le travail sur devWork vers Master, etc.
la source