Pourquoi ne puis-je pas modifier un message de validation SVN?


12

J'utilise SVN. Parfois, je manque quelque chose lorsque j'écris un message de validation. Mais une fois qu'il a été validé, il ne peut pas être annulé, et même je ne peux pas modifier le message. Pourquoi n'y ont-ils pas mis la fonction d'édition?


7
Me rappelle l'histoire de Dave.cpp sur thedailtywtf
Falcon

1
Utilisez simplement git , il permet de fusionner les commits, de modifier les messages et de faire tout ce que vous voulez avec votre historique.
SK-logic

Ou si vous ne pouvez pas, alors utilisez git-svnet personne ne sera le plus sage.
Matthew Scharley

@Matthew: comment diable avec git-svn vous permet-il de changer l'historique dans un dépôt svn désactivé pour la modification de l'historique?
gbjbaanb

2
@gbjbaanb: Ce ne serait pas le cas, si vous avez déjà poussé vers le serveur SVN. Mais si vous ne vous êtes engagé que localement, vous pouvez toujours modifier le message de validation avant de le pousser dans le référentiel en direct.
Matthew Scharley

Réponses:


15

Selon la FAQ SVN, vous pouvez le faire si l'administrateur du référentiel l'a activé ou si vous disposez d'un accès administratif local au référentiel .

Cependant, cela est probablement une mauvaise idée. Vous changez en effet l'histoire. L'un des points du contrôle de version est de maintenir un historique et une piste d'audit pour le projet. Autoriser des modifications arbitraires de l'historique annule la piste d'audit. Au lieu de cela, je vous recommande d'effectuer des validations plus petites, d'écrire des messages de validation concis mais explicites et d'améliorer votre flux de travail personnel pour éviter ces erreurs.


4
@Matthew Même dans git, changer l'histoire à tout moment est, à mon avis, une idée terrible. L'historique est censé servir de piste d'audit et ne devrait jamais être modifié par personne à aucun moment, pour aucune raison.
Thomas Owens

2
Ayez donc une piste d'audit pour le message de validation, car généralement, la modification du message de validation a pour but de faciliter le suivi de l'historique du projet.
Peter Taylor

2
Supposons que je découvre qu'un message de validation que j'ai entré il y a un mois est trompeur, déroutant et carrément faux . Ne devrais-je pas être en mesure d'ajouter une notation de correction qui sera vue par tous ceux qui voient le message incorrect? (Je suis d'accord que le message d'origine devrait être facilement disponible sans modification et que le changement lui-même devrait être suivi et horodaté. Mais je ne suis pas d'accord que cela constitue une "histoire en évolution".)
David Schwartz

2
Des informations erronées sont inacceptables, par conséquent, les personnes ne doivent pas être autorisées à corriger ou à clarifier ces informations, car cela masquerait leur malversation. Sensationnel. Juste wow.
David Schwartz

3
Honnêtement, vous commencez à ressembler à une auto-parodie. "Il doit être correct, donc il ne doit jamais être corrigé."
David Schwartz

5

Pour ce faire, vous devez essentiellement avoir des droits d'administrateur (directement ou indirectement) sur le référentiel. Vous pouvez soit configurer le référentiel pour permettre à tous les utilisateurs de le faire, soit modifier le message du journal directement sur le serveur.

Consultez la FAQ SVN ici.

Les messages de journal sont conservés dans le référentiel en tant que propriétés attachées à chaque révision. Par défaut, la propriété de message de journal (svn: log) ne peut pas être modifiée une fois qu'elle est validée. En effet, les modifications apportées aux propriétés de révision (dont svn: log en est un) entraînent la suppression définitive de la valeur précédente de la propriété et Subversion essaie de vous empêcher de le faire accidentellement. Cependant, il existe plusieurs façons d'obtenir que Subversion modifie une propriété de révision.

La première façon consiste pour l'administrateur du référentiel à activer les modifications des propriétés de révision. Cela se fait en créant un hook appelé "pre-revprop-change" (voir cette section dans le livre Subversion pour plus de détails sur la façon de procéder). Le hook "pre-revprop-change" a accès à l'ancien message de journal avant qu'il ne soit modifié, il peut donc le conserver d'une manière ou d'une autre (par exemple, en envoyant un e-mail). Une fois les modifications des propriétés de révision activées, vous pouvez modifier le message du journal d'une révision en passant le commutateur --revprop à svn propedit ou svn propset, comme l'un des deux:

$svn propedit -r N --revprop svn:log URL 
$svn propset -r N --revprop svn:log "new log message" URL 

où N est le numéro de révision dont vous souhaitez modifier le message de journal et URL est l'emplacement du référentiel. Si vous exécutez cette commande à partir d'une copie de travail, vous pouvez laisser l'URL.

La deuxième façon de modifier un message de journal consiste à utiliser svnadmin setlog. Cela doit être fait en se référant à l'emplacement du référentiel sur le système de fichiers. Vous ne pouvez pas modifier un référentiel distant à l'aide de cette commande.

$ svnadmin setlog REPOS_PATH -r N FILE

où REPOS_PATH est l'emplacement du référentiel, N est le numéro de révision dont vous souhaitez modifier le message de journal et FILE est un fichier contenant le nouveau message de journal. Si le hook "pre-revprop-change" n'est pas en place (ou si vous souhaitez contourner le script de hook pour une raison quelconque), vous pouvez également utiliser l'option --bypass-hooks. Cependant, si vous décidez d'utiliser cette option, soyez très prudent. Vous pouvez contourner des éléments tels que les notifications par e-mail de la modification ou les systèmes de sauvegarde qui gardent une trace des propriétés de révision.

Réponse de Kamil Kisiel en réponse à une question similaire sur Stack Overflow .


Lorsque vous copiez collez une réponse de stackoverflow, vous devez au moins la marquer comme une citation et donner du crédit à l'OP (Kamil Kisiel dans ce cas). Lien vers l'original: stackoverflow.com/questions/304383/… Veuillez modifier votre réponse ou je vais vous dévaloriser.
Falcon

4

Parce qu'il s'agit d'un système de contrôle de version centralisé - Dès que vous validez une modification (et que votre message de validation est lié par convention au commit), tous ceux qui ont un accès en lecture au référentiel peuvent voir ces informations. C'est une mauvaise idée de changer une information après sa diffusion , car les gens se retrouvent avec une opinion différente de la «réalité».

Les systèmes de contrôle de version distribués comme Git atténuent ce problème en s'assurant que l'acte de rendre les informations disponibles pour les autres est atomique et sans aucune information supplémentaire comme les messages de validation. Mais le même principe s'applique ici: vous êtes découragé de changer localement des choses que vous avez déjà mises à la disposition des autres.


Ils pourraient autoriser plusieurs versions du message de validation ...
Alex Feinman

1
@ l0b0 n'est-il pas objectivement pire de continuer à diffuser des informations fausses, trompeuses ou susceptibles de causer des dommages? La tenue de registres ne nécessite pas de consacrer de mauvaises données.
user179700

1
@ user179700: Vous avez raison. Il y a une hypothèse de conception fondamentalement erronée dans tous les VCS que j'ai jamais vus: Un commit a un message de commit, qui est immuable. Comme le dit Alex, nous devons "autoriser plusieurs versions du message de validation".
l0b0

@ l0b0 Je trouve cette question intéressante plus je la considère. Ma première réaction a été dans le sens de, écrivez plus attentivement. La pratique actuelle semble entraver le processus. Je me demande aussi si d'autres systèmes mettent en œuvre une pratique plus robuste. Il est temps de poser une autre question. +1
user179700

@ user179700: J'espère actuellement écrire un script qui vous permettra de modifier un message de validation, mais uniquement en ajoutant une chaîne supplémentaire (horodatée). Cela vous permet de corriger les erreurs tout en préservant la piste d'audit.
Tynam
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.