¿Cómo elimino todos los archivos no rastreados de mi directorio de trabajo en Mercurial?


207

¿Es posible eliminar todos los archivos no rastreados de mi directorio de trabajo? Digamos que agregué un montón de archivos a mi directorio de trabajo, no los agregué a través de 'hg add' y ahora quiero deshacerme de esos archivos nuevos por completo.

Estoy en Windows, aunque estoy usando PowerShell, por lo que aquí también es posible una solución combinada.

Respuestas:


286

Agregue la extensión Mercurial llamada purga . Se distribuye por Mercurial.

Esta extensión agrega un comando de "purga" a "hg" que elimina los archivos que Mercurial no conoce. es decir, archivos no rastreados. Entonces tu comando sería,

hg purge

No está habilitado de forma predeterminada, tal vez para evitar eliminar accidentalmente archivos que olvidó agregar.

Para instalar esta extensión, agréguela a su archivo de configuración mercurial (.hgrc en Unix, Mercurial.ini en Windows)

[extensions]
purge = 

Para habilitar esta extensión temporalmente, puede usar

hg purge --config extensions.purge= 

26
hg purge --alleliminará todos los archivos no rastreados e ignorados. Esto es útil para limpiar compilaciones en la fuente
tacaswell

22
para habilitar temporalmente la extensión que puede usarhg purge --config extensions.purge=
Pykler

121

La forma correcta sin purga es:

hg st -un0 | xargs -0 rm

1
@simplyharsh, ¿es así mejor o simplemente le pareció menos trabajo que agregar la extensión?
Yaakov Kuperman

3
@YaakovKuperman Supongo que agregar extensión es un trabajo menor que este comando (habilitar una vez). No habilito la extensión de purga porque la necesito menos de una vez en quince días. También llámame tonto, pero escribir este comando me da tiempo suficiente para pensar de nuevo antes de hacer algo tan destructivo como 'purgar'.
simplemente duro

2
@simplyharsh, eso tiene sentido, pero hay dos razones por las que me gustaría purgar de todos modos. Primero, puede hacer una purga hg --print y ver una lista de lo que se eliminará antes de hacer la purga. En segundo lugar, si lo hace de esta manera, debe estar en la raíz del repositorio para que funcione.
Yaakov Kuperman

1
@javawizard: Este es uno bueno que me hizo repensar cómo funciona hg. Sin embargo, solo funciona porque rm -rf *omite archivos de puntos y directorios de puntos, incluidos .hg/. Del mismo modo, cualquier otro archivo de puntos (digamos .evil-settings) también sobrevivirá y la purga es mejor.
dirkjot

2
Tenga en cuenta que existe una diferencia de comportamiento entre lo que encuentra 'hg st -u' y 'hg purge'. 'hg st -u' NO encontrará directorios vacíos sin seguimiento, mientras que 'hg purge' los encontrará (y eliminará). Eso puede o no ser importante para usted.
Michael Kent

19

¡Gracias! Esto funcionó para mí también en Powershell:

hg st -un | rm

2
xargs no funciona en PowerShell: esta es la única respuesta que está lista para usar "
compatible

de acuerdo ... segundo en que xargs no funciona en PowerShell ... sin embargo, la purga sigue siendo una opción viable
beauXjames

Trabajó para mí :)
Naveen Kumar V

4
rm $(hg st -u)

... donde -u significa "sin seguimiento" también puede elegir otro estado.


4

Puedes usar

hg purge --all

para eliminar todos los archivos ignorados y no rastreados

(primero debe instalar la extensión de purga como se explica en algunas respuestas)



2

Esto debería funcionar:

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

2

si no quieres usar la purga:

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

0

Suponiendo que está utilizando un sistema * nix, podría ejecutar algo como esto:

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

desde la raíz del repositorio mercurial.

No conozco un comando mercurial estándar para lograr lo mismo, pero creo que hay muchas más opciones de línea de comandos para hacer esto. Estoy seguro de que hay soluciones "mejores" y me interesaría escuchar cualquier otra sugerencia.

Utilice este comando con precaución ya que no se probó a fondo.


0

Esto funciona desde la línea de comandos de Windows 10 (se usa con precaución, por supuesto):

for /f %g in ('hg status -un') do @echo %g & @del %g
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.