remove from entire delete commits cleaner all mercurial dvcs purge

mercurial - entire - remove commit from history



¿Cómo eliminar automáticamente todos los archivos.orig en el árbol de trabajo Mercurial? (11)

Durante las fusiones Mercurial deja el archivo .orig para cualquier archivo no resuelto. Pero después de resolver problemas manualmente y marcar un archivo correcto, no elimina el archivo .orig. ¿Puede ser eliminado automáticamente por algún comando?

Trabajo en una Mac así que puedo usar algo como:

find . -iname ''*.orig'' -exec rm ''{}'' '';''

y alias o algo así, pero prefiero usar algo como hg cleanup ...

ACTUALIZAR:

Desde hace algún tiempo, la extensión de Purga se incluye con Mercurial y resuelve este problema muy bien.


Esta no es una forma automática de eliminar archivos adicionales, pero es lo suficientemente simple para ejecutarse manualmente.

El hg st puede mostrar archivos desconocidos o no rastreados . Puede usar esta salida como un argumento para el comando rm del sistema. Aquí hay un ejemplo real que acabo de realizar:

$ # SHOW ONLY THE CRUFT $ hg status --unknown ? config/settings.rb.orig ? lib/helpers.rb.orig ? routes/main.rb.orig $ # THE CRUFT WITHOUT THE "?" PREFIX $ hg status --unknown --no-status config/settings.rb.orig lib/helpers.rb.orig routes/main.rb.orig $ # SAFELY REMOVE ALL CRUFT $ rm -- `hg st -un`

Si tiene directorios vacíos, las banderas -r y -d para rm pueden ayudar.

Como extra , hg status --ignored podría utilizarse para limpiar todos los archivos temporales ignorados, así como para intercambiar archivos de su editor (por ejemplo, Vim).


Estoy trabajando en Powershell y no vi la respuesta aquí:

# NOTE: be in the root of your repository # fetch all .orig files recursively $orig = (dir *.orig -recurse) ; # remove each .orig file foreach ($item in $orig) { del $($item.FullName) ; } # afterwards I make sure to remove the references to the .orig files in the repo # then commit & push hg addremove ; hg commit -m "remove .orig" ; hg push ;


He publicado esta respuesta before . Pero este es el lugar correcto para esta respuesta.

Hice este archivo por lotes yo mismo.

IF "%1%" == "d" ( del /s *.orig del /s *.rej ) ELSE ( del /s /p *.rej del /s /p *.orig )

Ayuda: Guarde este contenido como orig.bat

  1. Ejecute orig d para eliminar todos los rechazos y archivos originales a la vez sin confirmación
  2. Ejecutar orig para eliminar archivos con confirmación [Mecanismo de seguridad]

Espero que esto sea útil.


Lo siguiente eliminará los archivos .orig en toda su jerarquía de copia de trabajo y también funciona para las rutas que contienen espacios:

find . -name *.orig | while read -d $''/n'' file; do rm -v "$file"; done;

Yo uso un alias en mi .bash_profile:

alias clearorig=''echo "Removing .orig files..."; find . -name *.orig | / while read -d $''/'''/n''/''' file; do rm -v "$file"; done;''


No me gusta la respuesta elegida. No elimina todo en todos los niveles del proyecto. Yo uso esto:

for f in `find . | grep .orig$`; do rm "$f"; done

Funciona tanto en Mac como en * nix


Personalmente, yo uso

$ rm **/*.orig

si me canso de los archivos .orig . Esto funciona en Zsh y en Bash 4 después de ejecutar shopt -s globstar .

Pero si usa otro shell o desea una solución integrada, entonces tal vez le gustará la extensión de depuración (enlace actualizado el 25/08/2016). Eso le permite eliminar todos los archivos sin seguimiento

$ hg purge

Puede eliminar todos los archivos sin seguimiento e ignorados con

$ hg purge --all

Una ventaja de usar hg purge es que esto también limpiará los directorios que se vacíen después de eliminar los archivos. La línea de comando rm simplemente dejará atrás los directorios vacíos.


Si solo desea eliminar los archivos .orig y está en una computadora con Windows, lo siguiente parece funcionar bien:

D:/workspace>hg purge -I **/*.orig --all

Esto eliminará todos los archivos sin seguimiento que terminan en .orig, pero no eliminará otros archivos sin seguimiento, como lo harían las otras respuestas.

Puede probar esto antes de ejecutarlo colocando también el --print .


Un comando que utilizo en Linux para limpiar, guarda la necesidad de hacer una nueva búsqueda con find.

Estos deben ejecutarse desde el directorio raíz del proyecto Mercurial

hg status | grep ".orig" | cut -d '' '' -f 2- | xargs rm -f

O si desea borrar todos los archivos desconocidos.

hg status | cut -d '' '' -f 2- | xargs rm -f


Yo personalmente uso lo siguiente desde la raíz del repositorio:

hg purge -p -I **/*.orig | xargs rm -f

Es un poco mejor que usar solo ''hg purge'' o ''hg purge --all'' porque puedes filtrar los tipos de archivos específicos que deseas incluir.

Para una explicación:

  • El argumento -p imprime la lista de archivos a purgar
  • La lista blanca de argumento -I filtra los archivos para incluir
  • La lista resultante se canaliza a xargs y se ejecuta con el comando rm -f

deberías usar el gancho de actualización

actualización: se ejecuta después de que se haya completado una actualización o fusión del directorio de trabajo


por cierto. find utility tiene una acción -delete para que pueda escribir solo:

find <path-to-files> -name ''*.orig'' -delete