Qual è la differenza tra hg forget e hg remove?


313

Voglio che mercurial rimuova diversi file dallo stato corrente del repository. Tuttavia, voglio che i file esistano nella storia precedente.

Come fanno forgete removesi differenziano, e possono fare quello che voglio?


27
Non preoccuparti, non puoi rimuovere un file dalla cronologia precedente in Mercurial: la cronologia è generalmente immutabile a meno che non inizi a utilizzare le estensioni.
Martin Geisler,

Risposte:


348

' 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.


7
"hg forget" è stato reintrodotto in Mercurial 1.3 come un modo più semplice di eseguire "hg remove -Af". Pianifica la cancellazione del file senza rimuoverlo dalla copia di lavoro.
Martin Geisler,

5
Felice di sentirlo. 'remove -Af' (e l'intera tabella di opzioni nella pagina di aiuto 'remove') è / era pazzia.
Ry4an Brase,

32
@ Ry4an: Seriamente, è stato ridicolo. Ho contribuito alla patch che ha reintrodotto "dimenticare". Quando lo stavo realizzando, mi sono reso conto che -se aveva perfettamente senso nel codice ma dal punto di vista dell'utente era completamente ridicolo.
Steve Losh,

10
Heh, questo è ciò che è così bello di mercurial: le persone pensano attivamente e iterativamente a ciò che ha senso dal punto di vista dell'utente. Grazie per aver risolto quello.
Ry4an Brase,

9
File di configurazione build locale o simili? Percorsi verso strumenti locali che differiscono da sistema a sistema? Hai aggiunto accidentalmente un file di registro che non desideri nel controllo del codice sorgente, ma che desideri salvare? Immagino che accada.
Ry4an Brase,

42

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 forgeto hg removequando tiro da te. Un file su cui hai eseguito hg forgetl' esecuzione verrà eliminato quando eseguo l'aggiornamento a quel changeset - proprio come se avessi usato hg removeinvece.


27

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.


3

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 removecontro file di 7 diversi tipi di stato.


2

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.


3
Non so perché hai sentito il bisogno di aggiungere questa citazione quando l'uomo stesso è già intervenuto, ma hey, qualunque cosa galleggi sulla tua barca.
Nathan Tuggy,
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.