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
- Ejecute
orig d
para eliminar todos los rechazos y archivos originales a la vez sin confirmación - 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