Come posso eliminare tutti i file non tracciati dalla mia directory di lavoro in Mercurial?


207

È possibile eliminare tutti i file non tracciati dalla mia directory di lavoro? Diciamo che ho aggiunto un sacco di file alla mia directory di lavoro, non li ho aggiunti tramite 'hg add' e ora vuoi eliminare completamente quei nuovi file?

Sono su Windows, anche se sto usando PowerShell, quindi qui è possibile anche una soluzione combinata.

Risposte:


286

Aggiungi l'estensione mercuriale chiamata purge . È distribuito da Mercurial.

Questa estensione aggiunge un comando "purge" a "hg" che rimuove i file non noti a Mercurial. cioè file non tracciati. Quindi il tuo comando sarebbe,

hg purge

Non è abilitato per impostazione predefinita, forse per evitare la rimozione accidentale di file che hai dimenticato di aggiungere.

Per installare questa estensione, aggiungilo al tuo file delle impostazioni mercurial (.hgrc su Unix, Mercurial.ini su Windows)

[extensions]
purge = 

Per abilitare temporaneamente questa estensione è possibile utilizzare

hg purge --config extensions.purge= 

26
hg purge --alleliminerà tutti i file non tracciati e ignorati. Questo è utile per ripulire le build in-source
tacaswell,

22
per abilitare temporaneamente ext puoi usarehg purge --config extensions.purge=
Pykler il

121

Il modo corretto senza spurgo è:

hg st -un0 | xargs -0 rm

1
@simplyharsh è meglio o hai trovato meno lavoro che aggiungere l'estensione?
Yaakov Kuperman,

3
@YaakovKuperman Immagino che l'aggiunta dell'estensione sia un lavoro minore di questo comando (abilitazione una volta). Non abilito l'estensione di eliminazione perché ne ho bisogno meno di una volta ogni due settimane. Chiamami anche sciocco ma, digitando questo comando mi dà abbastanza tempo per ripensarci prima di fare qualcosa di così distruttivo come "purga".
Simplyharsh,

2
@simplyharsh, questo ha senso, ma ci sono due ragioni per cui farei lo spurgo lo stesso. Innanzitutto, è possibile eseguire hg purge --print e visualizzare un elenco di ciò che si libererà prima di eseguire l'eliminazione. In secondo luogo, se lo fai in questo modo, devi essere nella radice del repository affinché funzioni.
Yaakov Kuperman,

1
@javawizard: Questa è una cosa carina che mi ha fatto ripensare a come funziona hg. Tuttavia, funziona solo perché rm -rf *salta i file punto e le directory punto, incluso .hg/. Allo stesso modo, qualsiasi altro dotfile (ad esempio .evil-settings) sopravviverà e l'eliminazione è migliore.
Dirkjot,

2
Tieni presente che esiste una differenza di comportamento tra ciò che trova "hg st -u" e "hg purge". 'hg st -u' NON troverà directory vuote non tracciate, mentre 'hg purge' le troverà (e le rimuoverà). Questo può o meno essere importante per te.
Michael Kent,

19

Grazie! Questo ha funzionato anche per me in Powershell:

hg st -un | rm

2
xargs non funziona in PowerShell - questa è l'unica risposta pronta all'uso "windows friendly"
Nikos Athanasiou,

d'accordo ... secondo che xargs non funziona in PowerShell ... purge è comunque un'opzione praticabile
beauXjames

Ha funzionato per me :)
Naveen Kumar V

4
rm $(hg st -u)

... dove -u sta per "non tracciato" puoi anche scegliere un altro stato.


4

Puoi usare

hg purge --all

per rimuovere tutti i file ignorati e non tracciati

(per prima cosa devi installare l'estensione di spurgo come spiegato in alcune risposte)



2

Questo dovrebbe fare il trucco:

hg status | grep '^\?' | sed 's/^\? //' | xargs rm -rf

2

se non si desidera utilizzare l'eliminazione:

rm $(hg st | grep ^? | awk '{print $2}')

0

Supponendo che si stia utilizzando un sistema * nix, è possibile eseguire qualcosa del genere:

rm `hg st | awk '/\?/ {print $2}'`

dalla radice del repository mercuriale.

Non conosco un comando mercuriale standard per ottenere lo stesso, ma credo che ci siano molte più opzioni da riga di comando per farlo. Sono sicuro che ci sono soluzioni "migliori" e sarei interessato a ricevere altri suggerimenti.

Utilizzare questo comando con cautela poiché non è stato testato a fondo.


0

Funziona dalla riga di comando di Windows 10 (usato con cautela ovviamente):

for /f %g in ('hg status -un') do @echo %g & @del %g
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.