Modificare retroattivamente il messaggio di commit SVN?


85

Vorrei riscrivere un gran numero di messaggi di commit SVN su una struttura diversa, ad esempio il prefisso di una categoria. A partire dal:

"foo" now accepts "bar" format for connection string.

Voglio

core - database - "foo" now accepts "bar" format for connection string.

C'è un modo semplice per farlo che non includa il dumping dell'intero repository usando svndumpfilter?

Sto lavorando con TortoiseSVN sul lato client e VisualSVN sul lato server. (VisualSVN è un wrapper del classico svn, con cui posso parlare anche tramite la riga di comando.)

Risposte:


98

Sì, i messaggi di commit possono essere modificati. Sono implementati come proprietà sulle revisioni, simili alle normali proprietà dei file.

Nella finestra del registro di TortoiseSVN è possibile fare clic con il pulsante destro del mouse su un commit e selezionare "Modifica messaggio di registro".


+1 Grazie per questo. Ho fatto un po 'di lavoro coinvolgendo alcune modifiche API che volevo impegnare separatamente per il resto, e ho scritto il messaggio di log per riflettere questo ... prima di eseguire il commit accidentale dell'intero lotto. L'ho "risolto" inserendo una modifica di spazio vuoto con un messaggio di log che spiegava il resto! la prossima volta saprò cosa fare.
Ed Daniel

1
Ho dato anche a questo un +1, ma poi non ha funzionato con un messaggio "Il repository non è stato abilitato ad accettare le modifiche alle modifiche; chiedi all'amministratore di creare un hook pre-revprop-change". L'amministratore saprà automaticamente cosa è necessario fare?
J.Merrill

19
Stai chiedendo a me se si dispone di un amministratore di Subversion competente? :)
JesperE

@ J.Merrill Devi navigare nella hookscartella nella posizione del repository e rinominare il pre-revprop-change.tmplin pre-revprop-change.batper farlo funzionare.
sa_leinad

59

Puoi certamente modificare i messaggi di log retroattivamente, è trattato nelle FAQ . Non sono sicuro di come funzioni l'interfaccia della riga di comando per VisualSVN, ma per vanilla svn il comando sarebbe

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

Se si desidera eseguire questa operazione per tutte le revisioni senza scaricare il repository e ricaricarlo, è possibile scrivere questo comando per lavorare su un elenco di tutte le revisioni. Ci vorrebbe un po 'di tempo per farlo, a seconda delle dimensioni del tuo repository, ma in linea di principio non c'è motivo per cui non puoi farlo e non implica un dump e un ricaricamento.

Inoltre, vanilla SVN ha un comando svnlookche è una sorta di strumento amministrativo che funziona direttamente con i file del repository. Quello strumento non comprende gli URL (devi avere accesso a livello di file system al repository), ma è molto più veloce. La sintassi è leggermente diversa, ma puoi modificare le proprietà allo stesso modo usando quello strumento.


3
Grazie @kazark, dovevo fare svn propedit -r N --revprop svn:logper poter cambiare il messaggio nel mio editor.
tutuDajuju

3
Solo per aggiungere una nota: per impostazione predefinita, quel comando non funzionerà, perché le modifiche alle proprietà di revisione non sono consentite per impostazione predefinita. Per consentirlo, l'amministratore svn deve creare un hook chiamato "pre-revprop-change" . Queste informazioni si trovano nelle FAQ come menzionato sopra.
Matthias

su Windows, sarà necessario impostare la variabile d'ambiente "SVN_EDITOR", "VISUAL" o "EDITOR" prima di eseguire il comando. Ad esempio:set SVN_EDITOR=notepad.exe
Enwired

26

Sì, puoi, ma devi prima abilitarlo nel repository.

Nel repository, nella directory hooks, c'è un file chiamato pre-revprop-change.tmpl. Ha un paio di pagine di commenti su ciò che fa e viene configurato per consentire solo modifiche alle proprietà del registro. Per abilitarlo, rinomina il file in pre-revprop-change e rendilo eseguibile (presumo una sovversione ospitata da POSIX, se stai usando Windows per ospitare, potresti trovare utile questo messaggio ).

Una volta che il repository lo consente, puoi usare Tortoise per modificare il messaggio di log per un commit dal menu di scelta rapida su un commit, oppure puoi usare la riga di comando.


+1 Informazioni eccellenti, signore. Non me lo lascerà fare senza un hook pre-revprop-change. Dovrò portare lo script bash del modello su Windows, ma non dovrebbe essere un problema.
Pekka

Ho aggiunto un collegamento a uno script di comando di esempio: svn.haxx.se/users/archive-2006-03/0107.shtml
Andrew Aylett


2

svn propedit -r N --revprop svn:log URL

URLsopra è facoltativo se sei già in una directory di lavoro. Apparirà quindi un editor in modo che il messaggio possa essere modificato.


1

Sono appena arrivato in questo post con il problema esatto, utilizzando Tartaruga SVN per client e VisualSVN su un server Windows.

Se ti capita di avere un messaggio di errore "una richiesta DAV non riuscita" , dai un'occhiata alla risposta di Andrew Aylett e vai a modificare "pre-revprop-change.tmpl" nella tua sottodirectory hooks del repository.

Una volta fatto questo, premere "modifica messaggio di registro" nel menu contestuale dovrebbe finalmente funzionare!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.