Si deux personnes font simultanément des modifications sur différentes
parties d'un fichier, CVS est suffisamment intelligent pour fusionner
les changements tout seul. Mais si deux personnes font des changements
sur la même partie d'un fichier, CVS ne peut
savoir quel doit être le résultat final, et va donc abandonner en se
plaignant : « Conflict ! » Les
conflits surgissent quand un développeur valide un changement et qu'un
second développeur, qui n'a pas utilisé la commande cvs
update pour recevoir les modifications du premier
développeur, essaie de valider ses propres changements
incompatibles. La résolution des conflits peut prendre des heures
voire des jours. Dans cette section, je vous expliquerai comment
résoudre les conflits de source.
Quand vous utilisez la commande cvs commit pour
envoyer automatiquement sur le serveur tous les fichiers que vous avez
modifié ou ajouté à un projet, le serveur du dépôt CVS pourra vous
informer que vos fichiers modifiés localement ne sont pas à jour avec
le serveur, ou vous avez besoin de fusionner à la main un ou plusieurs
fichiers avec les nouvelles versions déjà validées sur le serveur par
un autre développeur. Voici un message d'avertissement typique
survenant lors d'une session CVS :
$ cvs commit
cvs commit: Examining .
cvs commit: Up-to-date check failed for `andy.htm'
cvs commit: Up-to-date check failed for `sample.htm'
cvs commit: Up-to-date check failed for `index.htm'
...
cvs [commit aborted]: correct above errors first! |
Vous pouvez utiliser la commande
cvs update pour
mettre à jour la copie locale de votre projet avec les derniers
changements du dépôt CVS. Pour mettre à jour l'intégralité de votre
copie locale, ouvrez un interpréteur de commandes, placez vous dans le
répertoire contenant le projet que vous développez, et lancez la
commande :
Cela va mettre à jour et fusionner automatiquement tous les fichiers
qui ont changé depuis la dernière extraction de nouveaux fichiers du
dépôt CVS. Les mises à jour lignes à lignes sur des fichiers textes
(comme des fichiers HTML) peuvent souvent être gérées
automatiquement. CVS vous listera les fichiers qui requièreront votre
attention en vue d'une modification et fusion manuelle.
Vous modifiez localement un fichier nommé
index.html et au moment où vous le validez dans
l'entrepôt CVS, CVS vous répond avec l'erreur suivante :
$ cvs commit index.html
cvs commit: Up-to-date check failed for `index.html'
cvs [commit aborted]: correct above errors first! |
Cela survient car il y a une nouvelleversion de de ce fichier dans
l'entrepôt CVS. Vous devez utiliser la commande
cvs
update pour en obtenir la dernière version sur votre
machine :
$ cvs update index.html
RCS file: /usr/local/cvsroot/index.html,v
retrieving revision 1.4
retrieving revision 1.5
Merging differences between 1.4 and 1.5 into index.html
M index.htm |
Après la fusion automatique, vous devez vérifier la copie fusionnée
afin qu'elle fonctionne correctement. Une fois satisfait de votre
copie locale de
index.html, vous la validez dans
l'entrepôt CVS :
$ cvs commit index.htm
Checking in index.htm;
/usr/local/cvsroot/index.htm,v <-- index.htm
new revision: 1.6; previous revision: 1.5
done |
Dans certains cas, votre récent travail sur certains fichiers peut
être si important que le CVS aura besoin de votre intervention
manuelle de façon à réintégrer les modifications de tout le monde dans
l'entrepôt.
$ cvs commit index.html cvs commit: Up-to-date check failed for
`index.html' cvs [commit aborted]: correct above errors first! |
Utilisez la commande update pour mettre à jour votre copie
locale :
$ cvs update
cvs update: Updating .
RCS file: /usr/local/cvsroot/index.html,v
retrieving revision 1.5
retrieving revision 1.6
Merging differences between 1.5 and 1.6 into index.htm
rcsmerge: warning: conflicts during merge
cvs update: conflicts found in activity.htm
C index.htm |
Cette fois-ci, CVS a été incapable de fusionner les fichiers
automatiquement. Il a donc créé une copie spéciale du fichier
provoquant le conflit en lieu et place du fichier originel. Ce fichier
contient des lignes de marqueurs pour indiquer le début et la fin des
régions conflictuelles, par exemple :
Pour résoudre les conflits, modifiez simplement le fichier
index.html et remplacez le texte entre les
marqueurs et testez le résultat jusqu'à ce que ça marche. Vous devez
aussi enlever les marqueurs :
du fichier. Quand vous avez fini de corriger le fichier et l'avez
testé, utilisez la commande
cvs commit pour envoyer
dans l'entrepôt cette dernière version de votre fichier :
$ cvs commit
Checking in index.html;
/usr/local/cvsroot/index.html,v <-- index.html
new revision: 1.7; previous revision: 1.6
done |
CVS peut fonctionner en tant que moyen de communication de même que
main courante. La fonctionnalité « garder un oeil » permet à
plusieurs développeurs travaillant sur le même projet de notifier aux
autres qui travaille sur quoi à un instant donné. En positionnant un
oeil sur un fichier ou répertoire, un développeur peut demander à CVS
de lui dire si quelqu'un d'autre commence à travailler sur ce fichier
ou répertoire en lui envoyant un mél ou par un autre moyen.
Pour utiliser les yeux, vous devez modifier deux fichiers dans la
partie administrative de l'entrepôt de code. Vous devez modifier le
fichier $CVSROOT/CVSROOT/notify (qui spécifie à
CVS comment doivent se faire les notifications) et le fichier
$CVSROOT/CVSROOT/users (qui spécifie les adresses
mél externes.) Le meilleur moyen de modifier