Quand devriez-vous vous établir?

Lorsque vous travaillez avec un système SCM, quand devez-vous vous connecter?

Il existe plusieurs utilisations pour la ramification. L’une des utilisations les plus courantes consiste à séparer les projets ayant une base de code commune. Ceci est très utile pour expérimenter votre code sans affecter le tronc principal.

En général, vous verriez deux types de twigs:

  • Branchement de fonctionnalités: Si une fonctionnalité particulière est suffisamment perturbasortingce pour que vous ne souhaitiez pas que l’ensemble de l’équipe de développement en soit affectée à ses débuts, vous pouvez créer une twig sur laquelle effectuer ce travail.

  • Fixes Branch: Alors que le développement se poursuit sur le tronc principal, une twig de correctifs peut être créée pour contenir les correctifs à la dernière version du logiciel.

Vous pouvez être intéressé par l’article suivant, qui explique les principes de twigment et quand les utiliser:

  • Ned Batchelder – Démarrage rapide des twigments Subversion

En termes généraux, la fonction de twigment (une fonction VCS – Version Control System) a pour principal objective de réaliser l’ isolation du code.

Vous avez au moins une twig, ce qui peut être suffisant pour le développement séquentiel, et est utilisée pour de nombreuses tâches en cours d’enregistrement (validées) sur cette même twig unique.

Mais ce modèle montre rapidement sa limite:

Lorsque vous avez un effort de développement (refactoring, évolution, correction de bogues, etc.) et que vous réalisez que vous ne pouvez pas effectuer ces modifications en toute sécurité dans la même twig que votre twig de développement actuelle. tout), alors vous avez besoin d’une autre twig.
(Pour isoler ce nouveau code pour l’ancien code, même si les deux jeux de code seront fusionnés ultérieurement)

Voilà donc votre réponse:
Vous devez vous connecter chaque fois que vous ne pouvez pas poursuivre et enregistrer deux efforts de développement dans une twig.
(sans avoir une histoire horriblement compliquée à maintenir).


Une twig peut être utile même si vous êtes le seul à travailler sur le code source, si vous êtes nombreux.
Mais vous ne devriez pas faire “une twig par développeur”:
le but de “l’isolement” est fait pour isoler un effort de développement (une tâche qui peut être aussi générale que “développons la prochaine version de notre logiciel” ou aussi spécifique que “corrigeons le bug 23”),
ne pas isoler une “ressource” .

(une twig appelée “VonC” ne veut rien dire pour un autre développeur: et si “VonC” quittait le projet? Qu’est-ce que vous êtes censé faire avec?
une twig appelée “bugfix_212” peut être interprétée dans le contexte d’un système de suivi des bogues par exemple, et tout développeur peut l’utiliser avec au moins une idée de ce qu’il est censé faire avec lui.

Une twig n’est pas une balise (SVN est un système de révision qui essaie de proposer une fonctionnalité de gestion des versions comme la création de twigs et le marquage via des répertoires avec une copie de fichier peu coûteuse: cela ne signifie pas qu’une balise est une twig)

Définir une twig signifie également définir un stream de travail de fusion : vous devez savoir où fusionner votre twig lorsque vous en avez fini avec.
Pour cela, le chapitre 7 de Practical Perforce (Laura WINGERD – O’Reilly) est une bonne introduction (agnostique du VCS) pour fusionner le workflow entre différents types de twigs: “” Comment Software Evolves “(pdf)

Il définit le terme ligne de code (twig qui enregistre les étapes d’évolution significatives du code, soit par des balises à certains points, soit par une fusion importante vers la twig).

Il présente le modèle de ligne principale (une ligne de code centrale pour enregistrer les versions) et décrit divers objectives pour la création de succursales:

  • Flux de développement actif : une codeline persistante lorsque différents développements séquentiels ont lieu
  • twigs de tâches : twigs de courte durée pour des tâches plus spécifiques (la correction de bogues est une tâche classique, mais vous pouvez également définir une twig pour un effort de fusion que vous savez compliqué: vous pouvez fusionner, valider et tester dans cette twig de tâches) sans introduire de problème pour la principale twig de développement en cours)
  • twig de staging : pour préparer une version, avec des données spécifiques à la pré-production ou des fichiers de configuration.
  • Branches privées, succursales ad hoc et twigs éparses : pour des tâches très limitées , il suffit de pouvoir engager des travaux en cours sans attendre la fin des tests ou la révision des tests.
    Cela permet de “commettre tôt, commettre souvent”.

Autres concepts intéressants autour du VCS: Concepts de base
(à propos de ClearCase à l’origine, mais également valable pour tout VCS)

Tous les SCM du 21ème siècle vous disent:

Branche pour chaque tâche sur laquelle vous devez travailler , peu importe si c’est une nouvelle fonctionnalité, une correction de bugs, un test, etc. Ceci s’appelle la twig de rubrique et change la façon dont vous travaillez avec votre SCM.

Vous obtenez:

  • Meilleur isolement
  • Meilleure traçabilité -> vous associez des tâches à des twigs, et non à des groupes de modifications individuels, ce qui vous permet de vous engager autant de fois que vous le souhaitez et n’impose pas de limite comme “une vérification par tâche”.
  • Les tâches sont indépendantes (normalement à partir d’une ligne de base stable, donc vous ne vous concentrez que sur votre code, pas sur la correction des bogues de vos employés), et vous pouvez choisir de les intégrer à un moment donné ou plus tard. contrôle de version
  • Vous pouvez examiner le code facilement (à partir du contrôle de version, pas pré-valider des conneries) avant de bash la ligne principale

Des outils qui peuvent le faire:

  • Git
  • Mercuriel
  • Plastique SCM

Des outils qui ne peuvent pas le faire:

  • SVN
  • CVS
  • VSS
  • TFS
  • Forcément

Cela dépend aussi de l’outil SCM que vous utilisez. Les SCM modernes (git, mercurial, etc.) facilitent de plus en plus la création et la destruction de twigs lorsque cela est nécessaire. Cela vous permet, par exemple, de créer une twig par bogue sur lequel vous travaillez. Une fois que vous avez fusionné vos résultats dans le coffre, vous supprimez la twig.

D’autres SCM, par exemple subversion et CVS, ont un paradigme de twigment beaucoup plus “lourd”. Cela signifie qu’une twig est considérée comme appropriée uniquement pour quelque chose de plus grand qu’un patch de vingt lignes. Là, les twigs sont classiquement utilisées pour suivre des pistes de développement complètes, comme une version de produit précédente ou future.

Lorsque vous devez apporter des modifications significatives et / ou expérimentales à votre base de code, en particulier si vous souhaitez commettre des modifications intermédiaires, sans affecter le tronc.

Cela dépend du type de SCM que vous utilisez.

Dans les nouvelles versions dissortingbuées (comme git et mercurial), vous créez des twigs tout le temps et vous vous levez de toute façon. Je travaillerai souvent sur une twig séparée pendant un certain temps, simplement parce que quelqu’un a cassé la version principale, ou parce que le réseau est en panne, puis fusionnent avec les modifications plus tard, et il est si facile de le faire .

Le document (court et lisible) qui m’a le plus aidé à comprendre ce qui se passait dans les systèmes dissortingbués est: UnderstandingMercurial .

Dans les systèmes plus anciens avec un référentiel central (comme CVS, SVN et ClearCase), il s’agit d’un problème beaucoup plus sérieux qui doit être résolu au niveau de l’équipe, et la réponse devrait plutôt être de «conserver une ancienne version tout en permettant développement pour continuer sur la ligne principale », ou« dans le cadre d’une expérience majeure ».

Je pense que le modèle dissortingbué est bien meilleur et qu’il ne manque que de bons outils graphiques pour devenir le paradigme dominant. Cependant, ce n’est pas aussi bien compris, et les concepts sont différents, ce qui peut être source de confusion pour les nouveaux utilisateurs.

Je trouve que les conseils de Laura Wingerd et Christopher Seiwald de Perforce sont vraiment concis et utiles:

* Branch only when necessary. * Don't copy when you mean to branch. * Branch on incompatible policy. * Branch late. * Branch, instead of freeze. 

Voir http://www.perforce.com/sites/default/files/pdf/perforce-best-practices.pdf pour une explication détaillée de chacune d’elles et d’autres bonnes pratiques.

Les emtwigments ont diverses finalités:

  1. Fonctionnalités / twigs de bogue. Les twigs dynamics et actives qui sont déplacées dans la ligne de réseau lorsque la fonctionnalité / correction de bugs est terminée.
  2. Branches statiques (balises dans Subversion, mais essentiellement une «twig normale»). Ils fournissent un instantané statique de say, une version. Bien qu’ils puissent être travaillés, ils restnt intacts.

Le besoin de twigment peut également survenir:

  • lorsque vous souhaitez fournir un correctif à un client particulier (par exemple important) et que vous ne savez pas si le correctif fera partie des futures versions
  • Chaque fois que vous en avez envie.

    Vous ne le ferez probablement pas très souvent si vous travaillez avec un SCM centralisé, car les twigs font partie du référentiel officiel, et cela n’invite pas vraiment beaucoup d’expérimentation, sans compter que les fusions font vraiment mal.

    OTOH, il n’y a pas de différence technique entre une twig et une extraction dans les SCM dissortingbués, et les fusions sont beaucoup plus faciles. Vous aurez envie de twigr beaucoup plus souvent.

    Lorsque vous devez apporter des modifications, en fonction de votre twig actuelle, non destinées à la prochaine version de cette twig (et pas avant).

    Par exemple, nous travaillons généralement sur le tronc. Au moment de la sortie, quelqu’un devra faire un changement que nous ne souhaitons pas dans la version actuelle (il se peut que ce soit avant la sortie, en ce moment, généralement après la sortie). C’est à ce moment-là que nous nous engageons à mettre la version sur sa propre twig et à poursuivre le développement de la prochaine version sur le tronc.

    Laissant de côté toutes les technicités …..

    Branche quand tu sais qu’il est plus facile de fusionner!

    Gardant à l’esprit que la fusion sera toujours effectuée avec la façon dont le travail est effectué dans un projet.

    Une fois que cela sera réalisé, tous les autres problèmes tertiaires entreront en jeu.