Perché non riesco a modificare un messaggio di commit SVN?


12

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 nemmeno io posso modificare il messaggio. Perché non hanno inserito la funzione di modifica?


7
Mi ricorda la storia di Dave.cpp su thedailtywtf
Falcon,

1
Usa semplicemente git , ti permette di unire commit, modificare messaggi e fare qualsiasi altra cosa ti piaccia con la tua cronologia.
SK-logic

Oppure, se non ci riesci, usa git-svne nessuno sarà più saggio.
Matthew Scharley,

@Matthew: in che modo git-svn ti consente di cambiare la cronologia in un repository svn disabilitato per la modifica della cronologia?
gbjbaanb,

2
@gbjbaanb: Non lo sarebbe, se hai già eseguito il push up sul server SVN. Ma se hai eseguito il commit solo localmente, puoi comunque modificare il messaggio di commit prima di inserirlo nel repository live.
Matthew Scharley,

Risposte:


15

In base alle FAQ SVN, è possibile se l'amministratore del repository lo ha abilitato o se si dispone dell'accesso amministrativo locale al repository .

Tuttavia, farlo è probabilmente una cattiva idea. In effetti, stai cambiando la storia. Uno dei punti di controllo della versione è mantenere una cronologia e una pista di controllo per il progetto. Consentire modifiche arbitrarie alla cronologia sconfigge la pista di controllo. Invece, consiglierei di eseguire piccoli commit, scrivere messaggi di commit concisi ma espliciti e migliorare il flusso di lavoro personale per prevenire questi errori.


4
@Matthew Anche a proposito, cambiare la storia in qualsiasi momento è, secondo me, una terribile idea. La storia dovrebbe servire come pista di controllo e non dovrebbe mai essere modificata da nessuno in nessun momento e per nessun motivo.
Thomas Owens

2
Quindi, disporre di una traccia di controllo per il messaggio di commit, perché di solito lo scopo di modificare il messaggio di commit è di rendere più semplice seguire la storia del progetto.
Peter Taylor,

2
Supponiamo di scoprire che un messaggio di commit che ho inserito un mese fa è fuorviante, confuso e decisamente sbagliato . Non dovrei essere in grado di aggiungere una notazione di correzione che verrà visualizzata da tutti coloro che vedono il messaggio errato? (Concordo sul fatto che il messaggio originale dovrebbe essere facilmente disponibile senza modifiche e il cambiamento stesso dovrebbe essere monitorato e timestamp. Ma non sono d'accordo sul fatto che ciò costituisca "una storia che cambia".)
David Schwartz,

2
Le informazioni errate sono inaccettabili, pertanto le persone non devono essere autorizzate a correggerle o chiarirle, in quanto ciò nasconderebbe il loro malfunzionamento. Wow. Wow.
David Schwartz,

3
Sinceramente inizi a sembrare un'auto-parodia. "Deve essere corretto, quindi non deve mai essere corretto."
David Schwartz,

5

Fondamentalmente devi avere i diritti di amministratore (direttamente o indirettamente) sul repository per farlo. È possibile configurare il repository per consentire a tutti gli utenti di eseguire questa operazione oppure modificare il messaggio di registro direttamente sul server.

Controlla le FAQ SVN qui.

I messaggi di registro vengono conservati nel repository come proprietà associate a ciascuna revisione. Per impostazione predefinita, la proprietà del messaggio di registro (svn: log) non può essere modificata dopo il commit. Questo perché le modifiche alle proprietà di revisione (di cui svn: log è una) fanno sì che il valore precedente della proprietà venga scartato in modo permanente e Subversion cerca di impedirti di farlo accidentalmente. Tuttavia, ci sono un paio di modi per far sì che Subversion cambi una proprietà di revisione.

Il primo modo è per l'amministratore del repository di abilitare le modifiche alle proprietà di revisione. Questo viene fatto creando un hook chiamato "pre-revprop-change" (vedi questa sezione nel libro Subversion per maggiori dettagli su come farlo). L'hook "pre-revprop-change" ha accesso al vecchio messaggio di registro prima che venga modificato, quindi può conservarlo in qualche modo (ad esempio, inviando un'e-mail). Una volta abilitate le modifiche alle proprietà di revisione, è possibile modificare il messaggio di registro di una revisione passando l'interruttore --revprop a svn propedit o svn propset, come uno di questi:

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

dove N è il numero di revisione di cui si desidera modificare il messaggio di registro e URL è la posizione del repository. Se si esegue questo comando da una copia funzionante, è possibile lasciare l'URL.

Il secondo modo di modificare un messaggio di registro è utilizzare setlog svnadmin. Questo deve essere fatto facendo riferimento alla posizione del repository sul filesystem. Non è possibile modificare un repository remoto utilizzando questo comando.

$ svnadmin setlog REPOS_PATH -r N FILE

dove REPOS_PATH è la posizione del repository, N è il numero di revisione di cui si desidera modificare il messaggio di registro e FILE è un file contenente il nuovo messaggio di registro. Se l'hook "pre-revprop-change" non è a posto (o per qualche motivo vuoi bypassare lo script hook), puoi anche usare l'opzione --bypass-hooks. Tuttavia, se decidi di utilizzare questa opzione, fai molta attenzione. È possibile ignorare elementi quali notifiche e-mail della modifica o sistemi di backup che tengono traccia delle proprietà della revisione.

Risposta di Kamil Kisiel in risposta a una domanda simile su StackTranslate.it .


Quando copi incolla una risposta da StackOverflow, dovresti almeno contrassegnarla come una citazione e dare credito al PO (Kamil Kisiel in questo caso). Link all'originale: stackoverflow.com/questions/304383/… Modifica la tua risposta o ti voterò.
Falcon,

4

Poiché si tratta di un sistema di controllo versione centralizzato - Non appena si commette una modifica (e il messaggio di commit è per convenzione associato al commit), tutti coloro che hanno accesso in lettura al repository possono vedere tali informazioni. È una cattiva idea cambiare le informazioni dopo che sono state divulgate , perché le persone finiscono con una diversa opinione della "realtà".

I sistemi di controllo di versione distribuito come Git alleviano questo problema assicurandosi che l'atto di rendere le informazioni disponibili agli altri sia atomico e senza ulteriori informazioni come i messaggi di commit. Ma lo stesso principio si applica qui: sei scoraggiato dal cambiare le cose localmente che hai già reso disponibile per gli altri.


Potrebbero consentire più versioni del messaggio di commit ...
Alex Feinman,

1
@ l0b0 non è oggettivamente peggio continuare a diffondere informazioni false, fuorvianti o soggette a danni? La tenuta dei registri non richiede l'inserimento di dati errati.
user179700

1
@ user179700: hai ragione. C'è un presupposto di progettazione fondamentalmente errato in tutti i VCS che abbia mai visto: un commit ha un messaggio di commit, che è immutabile. Come dice Alex, dovremmo "consentire più versioni del messaggio di commit".
l0b0

@ l0b0 Questa domanda è interessante e più la considero. La mia prima reazione è stata quella di scrivere solo più attentamente. L'attuale pratica sembra ostacolare il processo. Anche io mi chiedo se altri sistemi implementano una pratica più solida. È tempo di pensare a un'altra domanda. +1
user179700

@ user179700: Attualmente spero di scrivere uno script che ti consenta di modificare un messaggio di commit, ma solo aggiungendo una stringa aggiuntiva (timestamp). Ciò consente di correggere gli errori preservando l'audit trail.
Tynam,
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.