51 votes

Décrivez votre processus d'utilisation du contrôle de version (VCS ou DVCS).

J'aimerais connaître le flux de travail des autres personnes qui utilisent des vcs ou des dvcs.

Veuillez décrire votre stratégie pour traiter les tâches suivantes :

  • Mettre en œuvre une fonctionnalité
  • Correction des bogues (pendant le développement et l'application déployée)
  • Examen du code
  • Refactoring du code (post-review du code)
  • Incorporer des correctifs
  • Sortie de la nouvelle version de votre application (bureau, web, mobile, les traiteriez-vous différemment ?)

N'hésitez pas à organiser votre réponse non pas en fonction des tâches, mais en fonction de ce qui vous semble pertinent, mais par VCS/DVCS (ne les mélangez pas).

Merci.

43voto

VonC Points 414372

La principale caractéristique que tous les VCS utilisent pour les diverses tâches que vous mentionnez est la suivante ramification la possibilité d'isoler un effort de développement de manière collaborative. Comme il s'agit d'un VCS central, plusieurs développeurs peuvent collaborer sur une même branche, avec des verrous pessimistes ou optimistes sur les fichiers, afin de développer une histoire parallèle.

Mais le fait d'être un VCS a deux impacts majeurs sur la ramification :

  1. Cela tend à décourager les commits, car une fois qu'un fichier est commité, il influence immédiatement l'espace de travail des autres vues avec la même configuration (c'est-à-dire "travailler sur la même branche").
    ~ Le processus de "publication" est un processus actif, avec des conséquences immédiates,
    ~ alors que la partie "consommation" (mise à jour de votre espace de travail) est passive (vous êtes obligé de traiter les changements publiés par d'autres personnes dès la mise à jour de votre espace de travail).
  2. Il fonctionne bien pour linéaire flux de fusion (c'est-à-dire "fusionner uniquement de la branche A vers la branche B, ne pas mélanger les fusions dans les deux sens" -- A vers B vers A vers B...). Les fusions sont triviales, toutes les modifications de A sont simplement reportées vers B.

Maintenant :

Mise en œuvre d'une fonctionnalité

N'importe quel VCS le fera en créant une branche, mais ce qui m'a beaucoup surpris, c'est qu'il n'est pas facile de créer une branche de "fonctionnalité" :
* la fonction peut devenir trop compliquée
* il pourrait être prêt à temps pour la prochaine version
* seule une partie de cette branche doit être fusionnée dans la branche de développement principale.
* il peut dépendre d'autres fonctionnalités qui ne sont pas encore complètement réalisées

Vous devez donc faire attention à la façon dont vous gérez votre branche de fonctionnalité et vos commits : s'ils sont étroitement liés à la même fonctionnalité, tout se passera bien (vous fusionnez l'ensemble vers votre branche de développement principale lorsque vous en avez besoin). Sinon, les fusions partielles ne sont pas faciles avec ces outils.

Correction des bogues

La différence entre la correction des bogues pendant le développement et après la publication est que, dans le premier cas, vous pouvez souvent le faire de manière linéaire dans la même branche, alors que dans le second cas, vous devrez établir une branche de correction des bogues, et décider quels bogues vous devrez rétrocomporter dans votre branche de développement actuelle.

Examen du code

Il est préférable de l'utiliser avec des outils externes ( comme Crucible par exemple), et utilise abondamment les fonctions VCS telles que le blâme ou les annotations, afin de mieux attribuer les corrections de code après une révision.

Refactoring du code (post-review du code)

Si le remaniement est mineur, il peut se poursuivre dans la même branche. Mais s'il est important, une branche spéciale doit être créée, avec des tests unitaires effectués avant de commencer le remaniement.

Incorporer des correctifs

Même commentaire que le dernier point. Si le patch est important, une branche doit être créée.

Lancement de la nouvelle version de votre application

Un VCS ne vous mènera pas loin lorsqu'il s'agira de publier votre application, car il ne s'agit pas d'un outil de gestion des versions.
Vous devrez au préalable identifier une version à diffuser (label), mais après cela vient le processus de déploiement qui implique :

  • arrêter ce qui est en cours d'exécution
  • copier les nouveaux fichiers
  • les déployer (mise à jour de la base de données sql, webapp, ...)
  • instanciation de tous les fichiers de configuration (avec les bonnes valeurs, adresses, numéro de port, chemins, ...)
  • le redémarrage (et si votre système est composé de plusieurs composants, les redémarrer dans le bon ordre !)

Les éléments clés de VCS et de la gestion des versions sont les suivants :

  • ils ne sont pas très bien adaptés pour stocker des binaires à diffuser, ce qui signifie que vous en avez besoin pour construire votre application, et non pour stocker l'exécutable qui en résulte.
  • ils ne sont pas toujours les bienvenus dans l'environnement de production (où les contraintes de sécurité limitent l'accès en écriture, ainsi que le nombre d'outils fonctionnant sur ces plateformes, essentiellement des outils de surveillance et de reporting)

Le mécanisme de libération a également une influence sur les dépendances binaires :

  • pour les dépendances binaires externes, vous utiliserez probablement des mécanismes comme maven pour obtenir des révisions corrigées des bibliothèques externes.
  • mais pour les dépendances internes, lorsque vous ne développez pas une seule application mais plusieurs qui dépendent l'une de l'autre, vous devez savoir comment référencer les binaires produits par les autres applications (dépendances binaires internes), et ils ne seront généralement pas stockés dans votre VCS (surtout dans la phase de développement, où vous pouvez produire des binaires de type beaucoup de versions différentes pour que vos autres applications puissent les utiliser)

Vous pouvez également choisir d'être dans les dépendances de source (et obtenir toutes les sources des autres projets internes dont vous avez besoin pour les vôtres), et un VCS est bien adapté pour cela, mais il n'est pas toujours possible/pratique de tout recompiler.

37voto

VonC Points 414372

La principale différence avec un DVCS (Distributed Version Control) d'un VCS, est qu'il est fait (par la nature même de son travail distribué) pour faire une chose, et une chose bien :

fusionner .

Les tâches que vous mentionnez peuvent donc être envisagées sous cet angle.
Des branches seront toujours créées, mais elles ne seront pas toutes visibles par les autres développeurs. Beaucoup d'entre elles ne quitteront pas réellement votre local dépôt.

Le fait d'être un DVCS a deux conséquences principales sur les fusions :

  1. vous vous engagez autant de fois que vous le souhaitez. Ces commits ne sont pas immédiatement visibles pour les autres (c'est-à-dire qu'ils ne devront pas les fusionner immédiatement après la prochaine mise à jour de leur espace de travail).
    ~ le processus de publication est passif : vos poussées peuvent être ignorées par les autres dépôts.
    ~ la partie "consommation" est active : vous pouvez examiner ce qui a été poussé vers vous avant de le fusionner dans votre branche, et décider de ce que vous voulez fusionner et de qui (et pas seulement parce que vous travaillez tous sur une "même branche").
  2. il fonctionne bien pour tout type de flux de fusion (partielle, croisée, récursive, ...). DAG (Graphique acyclique dirigé) souvent utilisé pour enregistrer l'historique par ces DVCS (au moins Git et Mercurial) permet de retrouver facilement ce qui a déjà été fusionné et de trouver l'ancêtre commun. C'est une différence importante entre SVN et ses homologues DVCS mais il y a d'autres aussi .

Maintenant :

Mettre en œuvre une fonctionnalité

Comme je le détaille dans mon Réponse du CVCS (Central VCS) La difficulté d'une branche "fonctionnalité" est que de nombreuses sous-fonctionnalités finiront par s'entremêler.
C'est là que les DVCS vont briller, car ils vous permettront de réorganiser leur historique local (c'est-à-dire "pas encore poussé") (changesets pour Mercurial, commits SHA1 pour Git), afin de faciliter les fusions partielles ou la création de branches de sous-fonctionnalités.

Correction des bogues

Vous pouvez presque créer une branche par bug-fix si vous le souhaitez. L'idée est de s'assurer qu'une correction de bogue est identifiée par un ensemble linéaire simple de commmits fusionnés dans la branche de développement (ou la branche de maintenance si elle est publiée).
I préfèrent s'assurer de rebaser d'abord la branche de correction de bogues par-dessus la branche de développement (pour m'assurer que mes corrections sont toujours conformes à tout travail qui aurait été fait en parallèle sur ladite branche principale), avant de fusionner cette branche de développement avec la branche de correction de bogues (fusion rapide : la branche principale référence maintenant tous les correctifs)

Examen du code

La fonction de blâme ou d'annotation est toujours là pour aider à attribuer les tâches lors d'une revue de code, mais cette fois, tous les développeurs ne sont pas nécessairement sur un seul site (puisqu'il s'agit d'un *VCS distribué *), et pas avec le même schéma d'identification (pas d'utilisation du même LDAP par exemple).

Une façon DVCS d'organiser la révision du code est de pousser les nouvelles modifications vers un dépôt spécial de révision du code, qui sera.. :

  • rejeter ces commits s'ils ne répondent pas aux critères de qualité requis
  • les accepter (les fusionner avec le repo de code-review), et les pousser vers un nouveau repo (utilisé pour divers tests par exemple)

Refactoring du code (post-review du code)

Ils sont réalisés sur le dépôt local du développeur, dans une branche (puisqu'il est si facile de la fusionner à nouveau).

Incorporer des correctifs

Même processus que la section précédente.

Sortie de la nouvelle version de votre application (bureau, web, mobile, les traiteriez-vous différemment ?)

Le processus de diffusion proprement dit est simplement initié par une version spécialement identifiée (tag) de votre logiciel. (le reste du "processus de gestion de la version", c'est-à-dire la partie déploiement et configuration, est détaillé dans le document Réponse CVCS )
La question est, avec un DVCS :
"De quel dépôt proviendra la version officielle de votre logiciel ?"

Vous devez établir un dépôt "central" ou plutôt "officiel" qui jouera le rôle de :

  • repo pour les versions à publier
  • repo pour les nouveaux dépôts auxquels vous souhaitez contribuer

Donc, il peut servir à la fois pour la libération, mais également à des fins de nouveau développement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X