Verrouiller

Subversion fonctionne généralement mieux sans verrouillage, en utilisant les méthodes « Copier-Modifier-Fusionner » décrites plus tôt dans la section intitulée « La solution Copier-Modifier-Fusionner ». Cependant il y a quelques cas où vous pouvez devoir mettre en oeuvre une certaine forme de politique de verrouillage.

Premièrement, vous devez vous assurer que votre serveur Subversion est mis à jour au moins à la version 1.2. Les versions précédentes ne supportent pas le verrouillage. Si vous utilisez un accès de type file://, alors il est sûr que votre client doit être mis à jour.

Comment le verrouillage fonctionne dans Subversion

Par défaut, rien n'est verrouillé et quiconque a un accès en livraison peut livrer des changements à n'importe quel fichier à tout moment. Les autres mettront à jour leurs copies de travail périodiquement et les changements du référentiel seront fusionnés avec les changements locaux.

Si vous obtenez un verrou sur un fichier, alors vous seul pouvez livrer ce fichier. Les livraisons des autres utilisateurs seront bloquées jusqu'à ce que vous relâchiez le verrou. Un fichier verrouillé ne peut être modifié d'aucune façon dans le référentiel, il ne peut donc pas être supprimé ou renommé non plus, sauf par le propriétaire du verrou.

Toutefois, les autres utilisateurs ne sauront pas nécessairement que vous avez pris un verrou. À moins qu'ils ne vérifient le statut du verrou régulièrement, ils le sauront la première fois lorsque leur livraison échouera, ce qui n'est pas très utile dans la plupart des cas. Pour rendre la gestion des verrous plus facile, il existe une nouvelle propriété Subversion svn:needs-lock. Quand cette propriété est définie (avec n'importe quelle valeur) sur un fichier, chaque fois que le fichier est extrait ou mis à jour, la copie locale est mise en lecture seule à moins que la copie de travail ne détienne un verrou pour le fichier. Cela agit comme un avertissement pour ne pas éditer ce fichier à moins que vous n'ayez d'abord acquis un verrou. Les fichiers qui sont versionnés et en lecture seule sont marqués avec un recouvrement spécial dans TortoiseSVN pour indiquer que vous devez acquérir un verrou avant l'édition.

Les verrous sont enregistrées par emplacement de copie de travail et par propriétaire. Si vous avez plusieurs copies de travail (à la maison, au travail) alors vous pouvez seulement détenir un verrou dans une de ces copies de travail.

Si l'un de vos collaborateurs acquiert un verrou et part ensuite en vacances sans le relâcher, que faites-vous ? Subversion fournit un moyen de forcer les verrous. Relâcher un verrou détenu par quelqu'un d'autre est connu comme Casser le verrou et l'acquisition de force d'un verrou déjà détenu par quelqu'un d'autre s'appelle Voler le verrou. Naturellement, ce ne sont pas des choses que vous devriez faire à la légère si vous voulez rester ami avec vos collaborateurs.

Les verrous sont enregistrés dans le référentiel et un jeton de verrouillage est créé dans votre copie de travail locale. S'il y a une incohérence, par exemple si quelqu'un d'autre a cassé le verrou, le jeton de verrouillage local devient invalide. Le référentiel est toujours la référence définitive.

Obtenir un verrou

Sélectionnez les fichiers dans votre copie de travail pour lesquels vous voulez acquérir un verrou, puis sélectionnez la commande TortoiseSVNObtenir un verrou....

Figure 4.41. La boîte de dialogue Verrouiller

La boîte de dialogue Verrouiller


Une boîte de dialogue apparaît, vous permettant de saisir un commentaire, pour que les autres puissent voir pourquoi vous avez verrouiller le fichier. Le commentaire est facultatif et seulement utilisé avec des référentiels basés sur Svnserve actuellement. Si (et seulement si ) vous deviez voler le verrou de quelqu'un d'autre, cochez la case Voler les verrous, cliquez ensuite sur OK.

Si vous sélectionnez un dossier et utilisez ensuite TortoiseSVNObtenir un verrou... la boîte de dialogue Verrouiller s'ouvrira avec tous les fichiers de tous les sous-dossiers choisis pour les verrouiller. C'est la bonne manière de faire si vous voulez vraiment verrouiller une arborescence complète, cependant vous pourriez devenir très impopulaire avec vos collaborateurs si vous les empêchez d'accéder au projet. À utiliser avec parcimonie...

Relâcher un verrou

Pour vous assurer de ne pas oubliez de relâcher un verrou dont vous n'avez plus besoin, les fichiers verrouillés sont affichés dans la boîte de dialogue de livraison et sélectionnés par défaut. Si vous continuez la livraison, les verrous que vous détenez sur les fichiers sélectionnés sont supprimés, même si les fichiers n'ont pas été modifiés. Si vous ne voulez pas relâcher les verrous de certains fichiers, vous pouvez les décocher (s'ils ne sont pas modifiés). Si vous voulez garder un verrou sur un fichier que vous avez modifié, vous devez activer la case à cocher Garder les verrous avant livrer vos changements.

Pour relâcher un verrou manuellement, sélectionnez les fichiers dans votre copie de travail pour lesquels vous voulez relâcher les verrous, choisissez ensuite la commande TortoiseSVNRelâcher un verrou Il n'y a rien d'autre à faire donc TortoiseSVN va contacter le référentiel et relâcher les verrous. Vous pouvez aussi utiliser cette commande sur un dossier pour relâcher tous les verrous récursivement.

Vérifier le statut des verrous

Figure 4.42. La boîte de dialogue Vérifier les modifications

La boîte de dialogue Vérifier les modifications


Pour voir quels verrous les autres et vous détenez, vous pouvez utiliser TortoiseSVNVérifier les modifications.... Les jetons des verrous détenus localement s'afficheront immédiatement. Pour vérifier les verrous détenus par les autres (et voir si l'un de vos verrous est cassé ou volé) vous devez cliquer sur Vérifier le référentiel.

À partir du menu contextuel ici, vous pouvez aussi bien obtenir et relâcher des verrous, que casser et voler des verrous détenus par d'autres.

Évitez de casser et de voler les verrous

Si vous cassez ou volez le verrou de quelqu'un d'autre sans le lui dire, vous pourriez potentiellement causer une perte du travail. Si vous travaillez avec des types de fichier non fusionnables et que vous volez le verrou de quelqu'un d'autre, une fois que vous relâchez le verrou, ils sont libres de livrer leurs changements et d'écraser les vôtres. Subversion ne perd pas de données, mais vous avez perdu la protection du travail en équipe que le verrouillage vous a donnée.

Mettre les fichiers non verrouillés en Lecture seule

Comme mentionné ci-dessus, la façon la plus efficace d'utiliser le verrouillage est de mettre la propriété svn:needs-lock sur les fichiers. Référez-vous à la section intitulée « Configuration des projets » pour les instructions sur la façon de définir les propriétés. Les fichiers avec cette propriété définie seront toujours extraits et mis à jour avec l'attribut Lecture seule défini à moins que votre copie de travaill ne détienne un verrou.

Pour vous le rappeler, TortoiseSVN utilise un recouvrement spécial pour l'indiquer.

Si vous pratiquez une politique où chaque fichier doit être verrouillé, vous pouvez trouver alors plus facile d'utiliser la fonctionnalité auto-props de Subversion pour définir la propriété automatiquement à chaque fois vous ajoutez de nouveaux fichiers. Lisez la section intitulée « Configuration de TortoiseSVN » pour plus d'informations.

Les scripts hook de verrouillage

Quand vous créez un nouveau référentiel avec Subversion 1.2 ou supérieur, quatre modèles de hooks sont créés dans le répertoire hooks du référentiel. Ceux-ci sont appelés avant et après l'obtention d'un verrou et avant et après la libération d'un verrou.

C'est une bonne idée d'installer un script hook post-lock et post-unlock sur le serveur qui envoie un e-mail indiquant que le fichier a été verrouillé. Avec une tel script en place, tous vos utilisateurs peuvent être informés si quelqu'un verrouille/déverrouille un fichier. Vous pouvez trouver un script hook exemple hooks/post-lock.tmpl dans le dossier de votre référentiel.

Vous pourriez aussi utiliser des hooks pour rejeter la casse ou le vol de verrous, ou les limiter peut-être à un administrateur nommé. Ou peut-être vous voulez envoyer un email au propriétaire quand un de ses verrous est cassé ou volé.

Lisez la section intitulée « Scripts de hook côté serveur » pour en savoir plus.