¿Cómo eliminar automáticamente todos los archivos .orig en el árbol de trabajo de Mercurial?
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.
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
- Ejecutar
orig d
para eliminar todos los rechazos y orig archivos a la vez sin confirmación - 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