Voglio che mercurial rimuova diversi file dallo stato corrente del repository. Tuttavia, voglio che i file esistano nella storia precedente.
Come fanno forget
e remove
si differenziano, e possono fare quello che voglio?
Voglio che mercurial rimuova diversi file dallo stato corrente del repository. Tuttavia, voglio che i file esistano nella storia precedente.
Come fanno forget
e remove
si differenziano, e possono fare quello che voglio?
Risposte:
' hg forget
' è solo una scorciatoia per ' hg remove -Af
'. Dall'aiuto ' hg remove
':
... e -Af può essere utilizzato per rimuovere i file dalla revisione successiva senza eliminarli dalla directory di lavoro.
In conclusione: ' remove
' cancella il file dalla tua copia di lavoro su disco (a meno che tu non lo usi -Af
) e ' forget
' no.
Il modo migliore per mettere è che hg forget
è identico al hg remove
tranne che lascia i file indietro nella vostra copia di lavoro. I file vengono lasciati indietro come file non tracciati e ora possono essere facoltativamente ignorati con un modello in .hgignore
.
In altre parole, non so dire se hai usato hg forget
o hg remove
quando tiro da te. Un file su cui hai eseguito hg forget
l' esecuzione verrà eliminato quando eseguo l'aggiornamento a quel changeset - proprio come se avessi usato hg remove
invece.
Dalla documentazione, apparentemente puoi usare entrambi i comandi per mantenere il file nella cronologia del progetto. Sembra che si desidera rimuovere, poiché elimina anche il file dalla directory di lavoro.
Dal libro Mercurial all'indirizzo http://hgbook.red-bean.com/read/ :
La rimozione di un file non influisce sulla sua cronologia. È importante capire che la rimozione di un file ha solo due effetti. Rimuove la versione corrente del file dalla directory di lavoro. Impedisce a Mercurial di tenere traccia delle modifiche al file, dal momento del prossimo commit. La rimozione di un file non modifica in alcun modo la cronologia del file.
La pagina man hg (1) dice questo di dimenticare:
Contrassegna i file specificati in modo che non vengano più tracciati dopo il prossimo commit. Ciò rimuove solo i file dal ramo corrente, non dall'intera cronologia del progetto e non li elimina dalla directory di lavoro.
E questo per rimuovere:
Pianifica i file indicati per la rimozione dal repository. Ciò rimuove solo i file dal ramo corrente, non dall'intera cronologia del progetto.
Se utilizzi "hg remove b"
un file con lo stato "A", il che significa che è stato aggiunto ma non eseguito il commit, Mercurial risponderà:
not removing b: file has been marked for add (use forget to undo)
Questa risposta è una chiara spiegazione della differenza tra rimuovere e dimenticare.
La mia comprensione è che "hg forget"
è per annullare un file aggiunto ma non impegnato in modo che non venga monitorato dal controllo della versione; while "hg remove"
serve per estrarre un file di commit dal controllo versione.
Questo thread ha un esempio per l'utilizzo hg remove
contro file di 7 diversi tipi di stato.
Un file può essere monitorato o meno, si utilizza hg add per tenere traccia di un file e hg remove o hg si dimentica di deselezionarlo. L'uso di hg remove senza flag eliminerà sia il file sia la sua non tracciabilità, hg forget lo staccherà semplicemente senza eliminarlo.