2011-09-10 10 views
10

Per incidente ho commesso due volte perché ho dimenticato di aggiungere due file. Posso rimuovere un commit specifico dal log?Posso cancellare un commit in Subversion?

screenshot of log

voglio cancellare impegnarsi № 4.

+2

Si consiglia di leggere questa domanda: http://stackoverflow.com/questions/5566327/delete-all-traces-of-a-svn-commit –

risposta

9

La risposta semplice è "no", perché Subversion non sa come risolvere il caso quando si aggiunge un commit, qualcun altro aggiorna il checkout e quindi si rimuove il commit dalla cronologia. Potrebbe esserci o meno una risposta complessa che implichi un intervento chirurgico nella memoria di Subversion.

1

Perché? Lascia che Subversion mantenga la storia - ecco a cosa serve. Effettua il check-in presto e spesso. Non è necessario cancellare commit # 4.

+1

Perché non ho aggiunto Site.cc e Site.hh (Ho dimenticato di farlo), ma il messaggio di conferma dice che l'ho fatto. –

+3

@WTP: la soluzione canonica sta semplicemente commettendo un ninjafix e commentandolo di conseguenza. Se si desidera una cronologia del pacchetto "accurato", one-commit-per-work-package, Subversion (o Subversion da solo) potrebbe non essere lo strumento adatto. – millimoose

+0

Se è stato eseguito un controllo pulito del progetto, appariranno questi due file? Se sì, allora li hai commessi. Credi a Subversion. – duffymo

4
  1. AFAICS, avete Non eliminare r4, ma unione con R5, sì?
  2. In generale, la cronologia dei commit SVN è immutabile, come dice ha detto - e se si non hanno diritti di eliminazione/creazione repository - non si può fare nulla.

Se è possibile eliminare repo corrente e di crearne nuovi con nuova storia, si può provare:

  • svnadmin dump per ottenere leggibile (a mala pena, devo dire) repository-dump, formato Grok e modificare discarica, eliminare pronti contro termine, svnadmin load di ricreare il repo
  • un'altra idea è (invece di editing discarica) un altro SCM, che ha un ponte verso SVN (Hg + MQ (histedit) + hg-git, fe, volontà consentono di ottenere repo e fold/delete changeset S). Per la sostituzione vecchio repository - vedi p.2 sopra
1

Nel tuo caso, è solo necessario modificare il messaggio di commit associato ad impegnarsi # 4 per riflettere le modifiche apportate effettive. Puoi farlo con Subversion modificando la configurazione del repository SVN. Vedi lo Subversion FAQ.