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

StackOverflow https://stackoverflow.com/questions/1067680

  •  21-08-2019
  •  | 
  •  

Pregunta

Durante las fusiones, Mercurial deja el archivo .orig para cualquier archivo no resuelto.Pero después de resolver los problemas manualmente y marcar un archivo como correcto, no elimina el archivo .orig.¿Se puede eliminar automáticamente mediante algún comando?

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

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

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

ACTUALIZAR:

Desde hace algún tiempo, Extensión de purga viene incluido con Mercurial y resuelve este problema muy bien.

¿Fue útil?

Solución

En lo personal, yo uso

$ rm **/*.orig

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

Sin embargo, si se utiliza otro shell o desea una solución integrada, entonces tal vez te gusta la extensión de purga (enlace actualiza 25.08.2016). Que permite eliminar todos los archivos sin seguimiento con

$ hg purge

Puede eliminar todos los archivos sin seguimiento e ignoradas por

$ hg purge --all

Una ventaja de utilizar hg purge es que esto también directorios de limpieza que se convierten en vacío después de la eliminación de los archivos. La línea de comandos rm se acaba de salir de los directorios vacíos atrás.

Otros consejos

por cierto. find utilidad tiene una acción -delete por lo que sólo se puede escribir:

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

Si lo que desea es eliminar los archivos .orig, y le sucede que estar en un equipo con Windows, la siguiente parece funcionar bien:

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

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

Puede probar esto antes de ejecutarlo al poner el indicador en --print también.

A continuación se eliminará .orig archivos en toda la jerarquía de copia de trabajo y también trabaja para 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;'

se debe utilizar el actualización gancho

  

Actualización: Esto se ejecuta después de una actualización o fusionar del directorio de trabajo ha terminado

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

Hice presentar este lote a mí mismo.

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

Ayuda: Guardar este contenido como orig.bat

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

Espero que esto es útil.

Yo personalmente uso el siguiente desde la raíz de la cesión temporal:

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

Es un poco mejor que el uso justo 'de purga hg' o 'hg purga --all' porque se puede filtrar los tipos de archivo específicos que desee incluir.

Para una explicación:

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

Estoy trabajando en Powershell y no ver 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 ;

Esta no es una forma automática de eliminar archivos adicionales, pero es lo suficientemente sencilla como para ejecutarla manualmente.

El hg st Puede mostrar desconocido o no rastreado archivos.Puede utilizar esta salida como argumento para el sistema. rm dominio.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 le quedan directorios vacíos, el -r y -d banderas para rm podría ayudar.

Como un prima, hg status --ignored podría usarse para limpiar todos esos archivos temporales ignorados, así como para intercambiar archivos desde su editor (por ejemplo, Vim).

Un comando que utilizo en Linux para la limpieza, ahorra la necesidad de hacer una nueva búsqueda con el hallazgo.

Estos necesidad de ejecutar 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

No me gusta la respuesta elegida. No elimina todo dentro de todos los niveles del proyecto. Yo uso este:

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

funciona tanto en Mac y * nix

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top