Perché non posso modificare un messaggio di commit SVN?

11

Sto usando SVN. A volte mi manca qualcosa quando scrivo un messaggio di commit. Ma una volta che è stato eseguito il commit, non può essere ripristinato e anche io non posso modificare il messaggio. Perché non hanno inserito la funzione di modifica?

    
posta Sanghyun Lee 01.09.2011 - 13:11
fonte

3 risposte

15

Secondo le FAQ SVN, è possibile se l'amministratore del repository lo ha abilitato o se si dispone di un amministratore locale accesso al repository .

Tuttavia, fare ciò è probabilmente una cattiva idea. In effetti, stai cambiando la storia. Uno dei punti di controllo della versione è il mantenimento di una cronologia e di un audit trail per il progetto. Consentendo modifiche arbitrarie alla cronologia sconfigge la pista di controllo. Invece, ti consiglio di eseguire commit più piccoli, scrivere messaggi di commit concisi ma espliciti e migliorare il tuo flusso di lavoro personale per prevenire questi errori.

    
risposta data 01.09.2011 - 13:18
fonte
5

Essentially you have to have admin rights (directly or indirectly) to the repository to do this. You can either configure the repository to allow all users to do this, or you can modify the log message directly on the server.

Check the SVN FAQ here.

Log messages are kept in the repository as properties attached to each revision. By default, the log message property (svn:log) cannot be edited once it is committed. That is because changes to revision properties (of which svn:log is one) cause the property's previous value to be permanently discarded, and Subversion tries to prevent you from doing this accidentally. However, there are a couple of ways to get Subversion to change a revision property.

The first way is for the repository administrator to enable revision property modifications. This is done by creating a hook called "pre-revprop-change" (see this section in the Subversion book for more details about how to do this). The "pre-revprop-change" hook has access to the old log message before it is changed, so it can preserve it in some way (for example, by sending an email). Once revision property modifications are enabled, you can change a revision's log message by passing the --revprop switch to svn propedit or svn propset, like either one of these:

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

where N is the revision number whose log message you wish to change, and URL is the location of the repository. If you run this command from within a working copy, you can leave off the URL.

The second way of changing a log message is to use svnadmin setlog. This must be done by referring to the repository's location on the filesystem. You cannot modify a remote repository using this command.

$ svnadmin setlog REPOS_PATH -r N FILE

where REPOS_PATH is the repository location, N is the revision number whose log message you wish to change, and FILE is a file containing the new log message. If the "pre-revprop-change" hook is not in place (or you want to bypass the hook script for some reason), you can also use the --bypass-hooks option. However, if you decide to use this option, be very careful. You may be bypassing such things as email notifications of the change, or backup systems that keep track of revision properties.

Risposta da Kamil Kisiel in risposta a una domanda simile su Stack Overflow .

    
risposta data 01.09.2011 - 13:42
fonte
4

Perché è un sistema di controllo della versione centralizzato - Non appena commetti una modifica (e il tuo messaggio di commit è per convenzione vincolato al commit), tutti coloro che hanno accesso in lettura al repository possono vedere tali informazioni. È una cattiva idea modificare le informazioni dopo che sono state divulgate , perché le persone finiscono per avere un'opinione diversa della "realtà".

I sistemi di controllo delle versioni distribuiti come Git alleviano questo problema assicurandosi che l'atto di rendere le informazioni disponibili agli altri sia atomico e privo di informazioni aggiuntive come i messaggi di commit. Ma lo stesso principio vale qui: sei scoraggiato dal cambiare le cose a livello locale che hai già reso disponibile agli altri.

    
risposta data 01.09.2011 - 13:49
fonte

Leggi altre domande sui tag