31 votes

Comment réparer l'erreur Perforce "Can't clobber writable file" ou message d'erreur Perforce - Can't Clobber Writable File

Erreur : Can't clobber writable file : //file name// (nom du fichier)

Solution : Lorsque vous essayez de synchroniser un fichier, perforce s'attend à ce que vos fichiers dans l'espace de travail aient des autorisations de lecture seule. Mais si un fichier n'est pas vérifié, (par p4 edit) mais a la permission d'écriture alors il lancera l'erreur ci-dessus. Changer le fichier en lecture seule et le synchroniser à nouveau. résoudra le problème. Vous pouvez aussi essayer de supprimer l'espace de travail et récupérer la dernière révision.

2 votes

Vous pouvez également définir l'option clobber dans la définition de votre espace de travail. perforce.com/perforce/doc.current/manuals/cmdref/Content/CmdRef/

4 votes

Ceux qui préfèrent utiliser p4v peuvent définir l'option Clobber en allant dans Connexions > Editer l'espace de travail actuel > Avancé et en cochant la case Clobber.

32voto

Sam Stafford Points 10894

L'erreur "can't clobber writable" file se produit parce que Perforce est très prudent quant à l'écrasement accidentel ("clobbering") du travail que vous avez fait dans votre espace de travail.

Le processus normal de Perforce consiste à p4 sync un fichier (ce qui le place dans votre espace de travail en lecture seule) et ensuite pour p4 edit si vous voulez le modifier (cela le rend accessible en écriture). Un fichier qui a été ouvert avec p4 edit sera toujours ignoré par p4 sync (sauf pour programmer en toute sécurité un resolve si nécessaire), et sera inclus par une p4 submit .

Si un fichier n'est pas ouvert, mais qu'il est accessible en écriture, cela signifie que quelque chose s'est mal passé dans ce flux de travail, par exemple que vous avez manuellement rendu le fichier accessible en écriture pour y apporter des modifications, et si sync met à jour ce fichier, vos modifications seront perdues ! Ainsi, le comportement par défaut de sync est de ne pas mettre à jour les fichiers inscriptibles.

Cette explication étant faite, voici quelques options :

  1. p4 sync -f forcera un fichier non ouvert à être mis à jour, qu'il soit ou non périmé, et qu'il soit ou non accessible en écriture. (Les fichiers ouverts sont toujours ignorés).

  2. p4 edit ouvrira le fichier. A partir de là, vos options sont p4 revert (abandon de vos modifications) ou p4 submit (en soumettant vos modifications).

  3. Changer noclobber à clobber dans votre spécification client supprime les sauvegardes contre la destruction des fichiers inscriptibles.

  4. Changer noallwrite à allwrite rend tous les fichiers accessibles en écriture par défaut, ce qui supprime implicitement l'attribut noclobber sauvegarde. Dans les versions actuelles du serveur, il active également l'option "safe sync" ( p4 sync -s ) par défaut, forçant les calculs de digest sur tous les fichiers avant de les mettre à jour. C'est plus lent que de s'appuyer sur le bit d'écriture, mais beaucoup plus précis. Notez que si vous travaillez sur des fichiers sans les ouvrir, vous courez toujours le risque de ne pas les avoir inclus dans votre fichier submit -- le p4 reconcile La commande est votre amie ici.

12 votes

Je voudrais juste ajouter que pour le numéro 1, p4 sync -f devrait être utilisé pour forcer la synchronisation de ces fichiers spécifiques. Quelqu'un pourrait être tenté de lancer p4 sync -f sur son dépôt pour éviter le message "clobber", et payer le prix d'une synchronisation complète de tous les fichiers.

2 votes

p4 sync -f peut être trop "lourd" et peut prendre beaucoup de temps dans le cas d'un grand arbre de travail. Je ne le mettrais pas en premier choix.

0 votes

p4 edit exige que l'utilisateur répète cette opération pour chaque fichier problématique. Il ne s'agit pas d'une solution unique pour tous les fichiers.

1voto

Vasanth Points 206

J'utilisais la version logicielle de Perforce et non l'interface de programmation. Ce qui a fonctionné pour moi, c'est que j'ai changé l'autorisation de l'ensemble du projet en lecture seule et que j'ai fermé Perforce et l'ai ouvert à nouveau. Ensuite, il a pu se synchroniser avec le nuage.

-2voto

JJ FU Points 17

p4 sync -f force la mise à jour d'un fichier non ouvert, qu'il soit ou non périmé, et qu'il soit ou non accessible en écriture. (Les fichiers ouverts sont toujours ignorés.)

Il fonctionne

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