È possibile localmente, ma non globalmente, e cambia l'ID di ogni commit dopo il punto in cui è stato aggiunto il file. Affinché la modifica si attacchi, avrai bisogno di accedere a ogni singola copia del repository, in particolare a quelli che vengono tirati o spinti.
Detto questo, ho seguito la sequenza Editing History descritta nel wiki Mercurial per rimuovere un file da uno dei miei repository.Questa sequenza presuppone che la revisione 1301: 5200a5a10d8b aggiunto il file path/to/badfile.cfg
, che non è stato modificato in qualsiasi revisione successiva:
Abilitare l'estensione MQ nel .hgrc
:
[extensions]
mq =
Tirare modifiche recenti da monte .
hg pull
importare tutto dal file aggiunta poi in MQ:
hg qimport -r 1301:tip
hg qpop -a
rimuovere il file dal commit che ha aggiunto di esso.
hg qpush 1301.diff
hg forget path/to/badfile.cfg
hg qrefresh
Convertire le patch in nuove revisioni Mercurial.
hg qpush -a
hg qfinish -a
Premere le nuove revisioni a monte.
hg push -f
Sul repository upstream e ogni singola altra copia, rimuovere le vecchie revisioni.
hg strip 5200a5a10d8b
Attenzione: Questo passaggio può distruggere l'opera, a meno che non si sta attenti. Se qualcuno ha commesso qualcosa dall'ultima volta che hai estratto l'upstream, dovrai prima ridimensionarlo prima di eseguire lo stripping. Sfortunatamente, l'estensione rebase
non è utile qui; dovrai ricominciare a utilizzare MQ, convertendo i nuovi commit in patch applicate alla nuova punta.
Buona fortuna.
questa risposta mi ha aiutato, anche se non "rimuove" ma converte il repository su se stesso (e perdi tutti gli ID dei changeset): http: // stackoverflow.com/a/22607889/714733 – jazzcat