Aller au contenu

« Gestion de versions » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
Valéry Beaud (discuter | contributions)
m petits wikis
Yacc (discuter | contributions)
m corr. lien base de données
Ligne 1 : Ligne 1 :
Le contrôle de version (''revision control'') permet de conserver l'historique des modifications d'un fichier [[informatique]]. Il s'applique principalement au code source, mais également à la documentation, aux [[bases de données]], à tout fichier texte et parfois aussi aux programmes (mais nous ne traiterons pas du contrôle de version des fichiers binaires pour l'instant).
Le contrôle de version (''revision control'') permet de conserver l'historique des modifications d'un fichier [[informatique]]. Il s'applique principalement au code source, mais également à la documentation, aux [[base de données|bases de données]], à tout fichier texte et parfois aussi aux programmes (mais nous ne traiterons pas du contrôle de version des fichiers binaires pour l'instant).




Wikipedia lui-même contient un mécanisme de contrôle de version; pour chaque article, vous y avez accès en cliquant sur le lien [http://fr.wikipedia.com/wiki.cgi?action=history&id=Contrôle_De_Version Voir les autres révisions].
Wikipedia lui-même contient un mécanisme de contrôle de version; pour chaque article, vous y avez accès en cliquant sur le lien [http://fr.wikipedia.com/wiki.cgi?action=history&id=Contrôle_De_Version Voir les autres révisions].




'''Note:''' la plupart des logiciels et des commandes de contrôle de version ont été écrit en anglais pour des raisons historiques. C'est pourquoi la correspondance avec la terminologie anglophone est indiquée en italique entre parenthèses lorsque cela est nécessaire.
'''Note:''' la plupart des logiciels et des commandes de contrôle de version ont été écrit en anglais pour des raisons historiques. C'est pourquoi la correspondance avec la terminologie anglophone est indiquée en italique entre parenthèses lorsque cela est nécessaire.







=== A quoi cela sert-il? ===
=== A quoi cela sert-il? ===

Vous êtes en train de modifier un fichier source; par prudence, vous sauvegardez régulièrement le fichier; vous quittez même l'éditeur pour compiler et tester la nouvelle version. Et vous vous rendez compte que ça ne va pas, qu'il vous faut revenir en arrière. Si vous n'avez fait qu'ajouter du code, il est facile de supprimer les nouvelles lignes; mais si vous en avez également supprimé, comment retrouver l'ancienne version si défaire (''undo'') n'est pas possible avec l'éditeur et si vous n'avez pas effectué de sauvegarde ailleurs?
Vous êtes en train de modifier un fichier source; par prudence, vous sauvegardez régulièrement le fichier; vous quittez même l'éditeur pour compiler et tester la nouvelle version. Et vous vous rendez compte que ça ne va pas, qu'il vous faut revenir en arrière. Si vous n'avez fait qu'ajouter du code, il est facile de supprimer les nouvelles lignes; mais si vous en avez également supprimé, comment retrouver l'ancienne version si défaire (''undo'') n'est pas possible avec l'éditeur et si vous n'avez pas effectué de sauvegarde ailleurs?




Tout cela n'arriverait pas avec un outil de contrôle de version. De plus, bien d'autres fonctionnalités très utiles sont incluses:
Tout cela n'arriverait pas avec un outil de contrôle de version. De plus, bien d'autres fonctionnalités très utiles sont incluses:




* récupérer ('''extraire''') n'importe quelle version antérieure, à partir d'un numéro de version ou d'une étiquette;
* récupérer ('''extraire''') n'importe quelle version antérieure, à partir d'un numéro de version ou d'une étiquette;

* connaître le nom du ou des auteurs de chaque version;
* connaître le nom du ou des auteurs de chaque version;

* '''verrouiller''' l'accès à un fichier pendant qu'on travaille dessus;
* '''verrouiller''' l'accès à un fichier pendant qu'on travaille dessus;

* '''comparer''' la version en cours avec la précédente version validée;
* '''comparer''' la version en cours avec la précédente version validée;

* permettre à plusieurs personnes de '''travailler simultanément''' sur un même fichier et donc:
* permettre à plusieurs personnes de '''travailler simultanément''' sur un même fichier et donc:

* avoir deux versions différentes d'un même fichier (on parle de '''branches''') qui évoluent en parallèle et pourront '''fusionner''' ultérieurement;
* avoir deux versions différentes d'un même fichier (on parle de '''branches''') qui évoluent en parallèle et pourront '''fusionner''' ultérieurement;

* interdire à certaines personnes de modifier un fichier: on peut ainsi créer des groupes de développeurs travaillant sur des composants différents d'un même logiciel.
* interdire à certaines personnes de modifier un fichier: on peut ainsi créer des groupes de développeurs travaillant sur des composants différents d'un même logiciel.







=== Les actions élémentaires ===
=== Les actions élémentaires ===

==== Extraction ====
==== Extraction ====

Lorsqu'un fichier est géré par un mécanisme de contrôle de version, la première action pour travailler avec ledit fichier est d'extraire (''check-out'') le fichier.
Lorsqu'un fichier est géré par un mécanisme de contrôle de version, la première action pour travailler avec ledit fichier est d'extraire (''check-out'') le fichier.




On peut l'extraire de deux façons:
On peut l'extraire de deux façons:

# en verrouillant (''lock'') le fichier afin que personne d'autre puisse le modifier avant qu'on le valide à nouveau;
# en verrouillant (''lock'') le fichier afin que personne d'autre puisse le modifier avant qu'on le valide à nouveau;

# sans verrou, parce que l'on désire seulement consulter le fichier (accès en '''lecture seule'''), ou bien parce que l'on est la seule personne à avoir accès au fichier à travers le contrôle de version.
# sans verrou, parce que l'on désire seulement consulter le fichier (accès en '''lecture seule'''), ou bien parce que l'on est la seule personne à avoir accès au fichier à travers le contrôle de version.




L'extraction doit également pouvoir s'appliquer à toute version antérieure du fichier, à partir du numéro correspondant.
L'extraction doit également pouvoir s'appliquer à toute version antérieure du fichier, à partir du numéro correspondant.




==== Validation ====
==== Validation ====

Une fois les modifications terminées (ou si l'on veut conserver la version actuelle, avant de poursuivre les modifications), il faut valider (''check-in'') le fichier.
Une fois les modifications terminées (ou si l'on veut conserver la version actuelle, avant de poursuivre les modifications), il faut valider (''check-in'') le fichier.




Le mécanisme de contrôle de version peut à cet instant demander de saisir une phrase expliquant les modifications effectuées (ce que fait d'ailleurs Wikipedia avec le Résumé lorsque l'on [[Wikipedia-Comment éditer Une Page|édite une page]]).
Le mécanisme de contrôle de version peut à cet instant demander de saisir une phrase expliquant les modifications effectuées (ce que fait d'ailleurs Wikipedia avec le Résumé lorsque l'on [[Wikipedia-Comment éditer Une Page|édite une page]]).




La validation aura pour effet de retirer automatiquement le '''verrou''' si vous en aviez posé un.
La validation aura pour effet de retirer automatiquement le '''verrou''' si vous en aviez posé un.




==== Historique et statut ====
==== Historique et statut ====

Après plusieurs extractions/validations, il peut être intéressant de consulter l'historique (''log'') des modifications d'un fichier. Les noms des auteurs, les commentaires ainsi que les dates associées seront affichés.
Après plusieurs extractions/validations, il peut être intéressant de consulter l'historique (''log'') des modifications d'un fichier. Les noms des auteurs, les commentaires ainsi que les dates associées seront affichés.




Si l'accès à un fichier nous est interdit, on peut savoir pourquoi en demandant le statut du fichier: s'il est verrouillé, le nom de la personne qui le détient sera indiqué de même que la date à laquelle a été posé le verrou.
Si l'accès à un fichier nous est interdit, on peut savoir pourquoi en demandant le statut du fichier: s'il est verrouillé, le nom de la personne qui le détient sera indiqué de même que la date à laquelle a été posé le verrou.







=== Les actions évoluées ===
=== Les actions évoluées ===

==== Comparaison ====
==== Comparaison ====

Dresser la liste des différences entre la version courante et la précédente version validée est fort utile et permet de maîtriser l'évolution du fichier.
Dresser la liste des différences entre la version courante et la précédente version validée est fort utile et permet de maîtriser l'évolution du fichier.




On peut également comparer deux versions quelconques du fichier.
On peut également comparer deux versions quelconques du fichier.




L'outil de comparaison est en général indépendant de celui de contrôle de version; on pourra donc choisir la visualisation de son choix: une présentation graphique des deux versions l'une à côté de l'autre avec une mise en couleur des différences est très appréciable.
L'outil de comparaison est en général indépendant de celui de contrôle de version; on pourra donc choisir la visualisation de son choix: une présentation graphique des deux versions l'une à côté de l'autre avec une mise en couleur des différences est très appréciable.




==== Fusion de deux branches ====
==== Fusion de deux branches ====

La fusion (''merge'') est nécessaire dans le cas de deux branches de modifications parallèles d'un fichier.
La fusion (''merge'') est nécessaire dans le cas de deux branches de modifications parallèles d'un fichier.




Si les deux versions ont été modifiées dans des sections différentes, la fusion sera aisée et automatique. Elle nécessitera une intervention manuelle de l'administrateur (ou intégrateur) dans le cas contraire.
Si les deux versions ont été modifiées dans des sections différentes, la fusion sera aisée et automatique. Elle nécessitera une intervention manuelle de l'administrateur (ou intégrateur) dans le cas contraire.




==== Etiquetage ====
==== Etiquetage ====

Imaginons non plus un fichier, mais un ensemble de fichiers sous contrôle de version. Les fichiers ont des numéros de version différents, mais ils forment un ensemble cohérent, qui constitue une '''livraison''' d'un logiciel ou d'un document.
Imaginons non plus un fichier, mais un ensemble de fichiers sous contrôle de version. Les fichiers ont des numéros de version différents, mais ils forment un ensemble cohérent, qui constitue une '''livraison''' d'un logiciel ou d'un document.




Il va être possible d'identifier les versions des fichiers correspondantes à la livraison en apposant une '''étiquette''' (''label'') sur celles-ci.
Il va être possible d'identifier les versions des fichiers correspondantes à la livraison en apposant une '''étiquette''' (''label'') sur celles-ci.




On pourra ensuite extraire tous les fichiers livrés ensemble de la base à partir de l'étiquette.
On pourra ensuite extraire tous les fichiers livrés ensemble de la base à partir de l'étiquette.




==== Logiciels de contrôle de version ====
==== Logiciels de contrôle de version ====




Les logiciels de contrôle de version sont nombreux. Sous [[UNIX]] il y a eu <i>SCCS</i> qui a suscité un [[logiciel libre]] alternatif : <i>RCS</i> (Revision Control System) qui est devenu un standard de fait. Comme <i>RCS</i> ne gérait que des fichiers individuels, nombre de ses utilisateurs ont créé des surcouches gérant les arborescences de fichiers. Certaines de ces surcouches furent distribuées librement. Il en fut ainsi de <i>PRCS</i> et de <i>CVS</i>. <i>CVS</i> est devenu extrêmement répandu dans le monde du [[logiciel libre]] sur Internet, mais aussi dans les entreprises.
Les logiciels de contrôle de version sont nombreux. Sous [[UNIX]] il y a eu <i>SCCS</i> qui a suscité un [[logiciel libre]] alternatif : <i>RCS</i> (Revision Control System) qui est devenu un standard de fait. Comme <i>RCS</i> ne gérait que des fichiers individuels, nombre de ses utilisateurs ont créé des surcouches gérant les arborescences de fichiers. Certaines de ces surcouches furent distribuées librement. Il en fut ainsi de <i>PRCS</i> et de <i>CVS</i>. <i>CVS</i> est devenu extrêmement répandu dans le monde du [[logiciel libre]] sur Internet, mais aussi dans les entreprises.

CVS est simple à mettre en oeuvre et offre les fonctionnalités fondamentales qu'attendent ses utilisateurs.
CVS est simple à mettre en oeuvre et offre les fonctionnalités fondamentales qu'attendent ses utilisateurs.




Mais l'histoire des logiciels de contrôle de version ne s'arrête pas en [[2002]] et de nouveaux logiciels libres s'apprêtent à concurrencer <i>CVS</i>, comme par exemple <i>Subversion</i>.
Mais l'histoire des logiciels de contrôle de version ne s'arrête pas en [[2002]] et de nouveaux logiciels libres s'apprêtent à concurrencer <i>CVS</i>, comme par exemple <i>Subversion</i>.








Version du 12 août 2002 à 14:33

Le contrôle de version (revision control) permet de conserver l'historique des modifications d'un fichier informatique. Il s'applique principalement au code source, mais également à la documentation, aux bases de données, à tout fichier texte et parfois aussi aux programmes (mais nous ne traiterons pas du contrôle de version des fichiers binaires pour l'instant).

Wikipedia lui-même contient un mécanisme de contrôle de version; pour chaque article, vous y avez accès en cliquant sur le lien Voir les autres révisions.

Note: la plupart des logiciels et des commandes de contrôle de version ont été écrit en anglais pour des raisons historiques. C'est pourquoi la correspondance avec la terminologie anglophone est indiquée en italique entre parenthèses lorsque cela est nécessaire.


A quoi cela sert-il?

Vous êtes en train de modifier un fichier source; par prudence, vous sauvegardez régulièrement le fichier; vous quittez même l'éditeur pour compiler et tester la nouvelle version. Et vous vous rendez compte que ça ne va pas, qu'il vous faut revenir en arrière. Si vous n'avez fait qu'ajouter du code, il est facile de supprimer les nouvelles lignes; mais si vous en avez également supprimé, comment retrouver l'ancienne version si défaire (undo) n'est pas possible avec l'éditeur et si vous n'avez pas effectué de sauvegarde ailleurs?

Tout cela n'arriverait pas avec un outil de contrôle de version. De plus, bien d'autres fonctionnalités très utiles sont incluses:

  • récupérer (extraire) n'importe quelle version antérieure, à partir d'un numéro de version ou d'une étiquette;
  • connaître le nom du ou des auteurs de chaque version;
  • verrouiller l'accès à un fichier pendant qu'on travaille dessus;
  • comparer la version en cours avec la précédente version validée;
  • permettre à plusieurs personnes de travailler simultanément sur un même fichier et donc:
  • avoir deux versions différentes d'un même fichier (on parle de branches) qui évoluent en parallèle et pourront fusionner ultérieurement;
  • interdire à certaines personnes de modifier un fichier: on peut ainsi créer des groupes de développeurs travaillant sur des composants différents d'un même logiciel.


Les actions élémentaires

Extraction

Lorsqu'un fichier est géré par un mécanisme de contrôle de version, la première action pour travailler avec ledit fichier est d'extraire (check-out) le fichier.

On peut l'extraire de deux façons:

  1. en verrouillant (lock) le fichier afin que personne d'autre puisse le modifier avant qu'on le valide à nouveau;
  2. sans verrou, parce que l'on désire seulement consulter le fichier (accès en lecture seule), ou bien parce que l'on est la seule personne à avoir accès au fichier à travers le contrôle de version.

L'extraction doit également pouvoir s'appliquer à toute version antérieure du fichier, à partir du numéro correspondant.

Validation

Une fois les modifications terminées (ou si l'on veut conserver la version actuelle, avant de poursuivre les modifications), il faut valider (check-in) le fichier.

Le mécanisme de contrôle de version peut à cet instant demander de saisir une phrase expliquant les modifications effectuées (ce que fait d'ailleurs Wikipedia avec le Résumé lorsque l'on édite une page).

La validation aura pour effet de retirer automatiquement le verrou si vous en aviez posé un.

Historique et statut

Après plusieurs extractions/validations, il peut être intéressant de consulter l'historique (log) des modifications d'un fichier. Les noms des auteurs, les commentaires ainsi que les dates associées seront affichés.

Si l'accès à un fichier nous est interdit, on peut savoir pourquoi en demandant le statut du fichier: s'il est verrouillé, le nom de la personne qui le détient sera indiqué de même que la date à laquelle a été posé le verrou.


Les actions évoluées

Comparaison

Dresser la liste des différences entre la version courante et la précédente version validée est fort utile et permet de maîtriser l'évolution du fichier.

On peut également comparer deux versions quelconques du fichier.

L'outil de comparaison est en général indépendant de celui de contrôle de version; on pourra donc choisir la visualisation de son choix: une présentation graphique des deux versions l'une à côté de l'autre avec une mise en couleur des différences est très appréciable.

Fusion de deux branches

La fusion (merge) est nécessaire dans le cas de deux branches de modifications parallèles d'un fichier.

Si les deux versions ont été modifiées dans des sections différentes, la fusion sera aisée et automatique. Elle nécessitera une intervention manuelle de l'administrateur (ou intégrateur) dans le cas contraire.

Etiquetage

Imaginons non plus un fichier, mais un ensemble de fichiers sous contrôle de version. Les fichiers ont des numéros de version différents, mais ils forment un ensemble cohérent, qui constitue une livraison d'un logiciel ou d'un document.

Il va être possible d'identifier les versions des fichiers correspondantes à la livraison en apposant une étiquette (label) sur celles-ci.

On pourra ensuite extraire tous les fichiers livrés ensemble de la base à partir de l'étiquette.

Logiciels de contrôle de version

Les logiciels de contrôle de version sont nombreux. Sous UNIX il y a eu SCCS qui a suscité un logiciel libre alternatif : RCS (Revision Control System) qui est devenu un standard de fait. Comme RCS ne gérait que des fichiers individuels, nombre de ses utilisateurs ont créé des surcouches gérant les arborescences de fichiers. Certaines de ces surcouches furent distribuées librement. Il en fut ainsi de PRCS et de CVS. CVS est devenu extrêmement répandu dans le monde du logiciel libre sur Internet, mais aussi dans les entreprises. CVS est simple à mettre en oeuvre et offre les fonctionnalités fondamentales qu'attendent ses utilisateurs.

Mais l'histoire des logiciels de contrôle de version ne s'arrête pas en 2002 et de nouveaux logiciels libres s'apprêtent à concurrencer CVS, comme par exemple Subversion.