¿Alguien sabe una forma de eliminar de forma recursiva todos los archivos en una copia de trabajo que no están bajo control de versiones? (Necesito esto para obtener resultados más confiables en mi VMware de compilación automática).
svn
build-automation
Stefan Schultze
fuente
fuente
hg purge --all
en Mercurial.Respuestas:
Editar:
Subversion 1.9.0 introdujo una opción para hacer esto:
Antes de eso, uso este script de Python para hacer eso:
Parece hacer el trabajo bastante bien.
fuente
svn cleanup --remove-unversioned
es mejor. Y es para Subversion 1.9.0 (esta versión es de 2015). Es estable y estándar.esto funciona para mí en bash:
El de Seth Reno es mejor:
Maneja carpetas y espacios no versionados en nombres de archivos.
Según los comentarios a continuación, esto solo funciona en archivos que Subversion no conoce (estado =?). Todo lo que hace la subversión sabe de (incluyendo ficheros ignorados / carpetas) no se eliminarán.
Si está usando subversion 1.9 o superior, simplemente puede usar el comando svn cleanup con las opciones --remove-unversioned y --remove-ignored
fuente
svn status | grep "^?" | awk '{print $2}' | xargs -d \\n rm -r
Me encontré con esta página mientras buscaba hacer lo mismo, aunque no para una compilación automática.
Después de buscar un poco más descubrí el ' Menú contextual extendido ' en TortoiseSVN. Mantenga presionada la tecla Mayús y haga clic con el botón derecho en la copia de trabajo. Ahora hay opciones adicionales en el menú de TortoiseSVN que incluyen ' Eliminar elementos no versionados ... '.
Aunque tal vez no sea aplicable para esta pregunta específica (es decir, dentro del contexto de una compilación automatizada), pensé que podría ser útil para otros que buscan hacer lo mismo.
fuente
Ver: svn-clean
fuente
Si está en la línea de comandos de Windows,
Versión mejorada:
Si usa esto en un archivo por lotes, necesita duplicar
%
:fuente
Agregué esto a mi perfil de Windows PowerShell
fuente
--no-ignore
asvn status
y-Recurse
aRemove-Item
Línea de comandos de Linux:
O, si algunos de sus archivos son propiedad de root:
Esto se basa en la respuesta de Ken. (La respuesta de Ken omite los archivos ignorados; mi respuesta los elimina).
fuente
Simplemente hazlo en unix-shell con:
fuente
¿No puede simplemente exportar a una nueva ubicación y construir desde allí?
fuente
Si tiene TortoiseSVN en su ruta y está en el directorio correcto:
Las opciones se describen en la ayuda de TortoiseSVN para
/command:cleanup
:fuente
Si está utilizando tortoise svn, hay un comando oculto para hacer esto. Mantenga presionada la tecla Mayús mientras hace clic con el botón derecho en una carpeta para iniciar el menú contextual en el explorador de Windows. Obtendrá un comando "Eliminar elementos no versionados".
consulte la parte inferior de esta página para obtener más detalles, o la captura de pantalla a continuación que resalta las características extendidas con las estrellas verdes y la de interés con el rectángulo amarillo ...
fuente
Subversion 1.9.0 introdujo la opción para eliminar elementos no versionados [1]
[1] https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
fuente
Mi conversión en C # de la secuencia de comandos Python de Thomas Watnedals:
fuente
Este es un comando de shell de Unix para eliminar todos los archivos que no están bajo el control de Subversion.
Notas:
st
insvn st
es un alias integrado parastatus
, es decir, el comando es equivalente asvn status
--no-ignore
también incluye archivos que no son de repositorio en la salida de estado; de lo contrario, se ignora a través de mecanismos como,.cvsignore
etc., ya que el objetivo es tener un punto de partida limpio para las compilaciones, este cambio es imprescindiblegrep
filtros de salida de tal manera que solo quedan archivos desconocidos para la subversión - las líneas que comienzan con la?
lista de archivos desconocidos para la subversión que serían ignorados sin la--no-ignore
opciónsed
xargs
comando recibe instrucciones a través de-r
que no se ejecuterm
, cuando la lista de argumentos estaría vacía-d '\n'
opción dicexargs
que use una nueva línea como delimitador, por lo que el comando también funciona para nombres de archivo con espaciosrm -r
se utiliza en caso de que sea necesario eliminar directorios completos (que no forman parte del repositorio)fuente
No pude hacer que nada de lo anterior funcione sin dependencias adicionales que no quería tener que agregar a mi sistema de compilación automatizado en win32. Así que reuní los siguientes comandos Ant; tenga en cuenta que estos requieren que se instale Ant-contrib JAR (estaba usando la versión 1.0b3, la última, con Ant 1.7.0).
Tenga en cuenta que esto elimina todos los archivos sin versión sin previo aviso.
Para una carpeta diferente, cambie la
${basedir}
referencia.fuente
elimine el eco si está seguro de lo que quiere hacer.
fuente
/bin/sh
y nrm
procesos bifurcados.Como todos los demás lo están haciendo ...
fuente
También podría aportar otra opción
El /(config|.ini)/ es para mis propios fines.
Y podría ser una buena idea agregar --no-ignore al comando svn
fuente
Me encontré con svn-clean en mi máquina RH5. Está ubicado en / usr / bin / svn-clean
http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean
fuente
Solución pura de Windows cmd / bat:
fuente
He tratado de Seth Reno versión de esta respuesta pero no funcionó para mí. He tenido 8 caracteres antes del nombre de archivo, no 9 usados en
cut -c9-
.Entonces esta es mi versión con en
sed
lugar decut
:fuente
Si estás de acuerdo con powershell:
Saque el indicador -WhatIf para que el comando realmente realice las eliminaciones. De lo contrario, solo mostrará lo que haría si se ejecuta sin el -WhatIf.
fuente
Agregaría esto como un comentario a la respuesta de Thomas Watnedal. , pero aún no puedo.
Un problema menor con él (que no afectará a Windows) es que solo busca archivos o directorios. Para sistemas similares a Unix donde pueden estar presentes enlaces simbólicos, es necesario cambiar la línea:
a
para eliminar también los enlaces.
Para mí, cambiar la última línea
if match: removeall(match.group(1))
porpara que muestre lo que está eliminando también fue útil.
Dependiendo del caso de uso, la
?[\?ID]
parte de la expresión regular puede ser mejor?[\?I]
, ya queD
también elimina los archivos eliminados, que estaban bajo control de versiones. Quiero usar esto para compilar en una carpeta limpia y registrada, por lo que no debería haber archivos en unD
estado.fuente
@zhoufei Probé tu respuesta y aquí está la versión actualizada:
%
marcas delante de G y H%~1
se puede usar cualquier nombre de directorio, lo usé como una función en un archivo bat, por lo que%~1
es el primer parámetro de entradafuente
Si no desea escribir ningún código, svn2.exe de svn2svn hace esto, también hay un artículo sobre cómo se implementa. Las carpetas y archivos eliminados se colocan en la papelera de reciclaje.
Ejecute "svn2.exe sync [ruta]".
fuente
Para las personas a las que les gusta hacer esto con perl en lugar de python, shell de Unix, java, etc. A continuación, un pequeño script en perl que también hace el jib.
Nota: Esto también elimina todos los directorios no versionados.
fuente
Usando TortoiseSVN: * haga clic con el botón derecho en la carpeta de la copia de trabajo, mientras mantiene presionada la tecla Mayús * elija "eliminar elementos no versionados"
¿Cómo puedo eliminar todos los archivos / carpetas no versionados / ignorados en mi copia de trabajo?
fuente
Una forma limpia de hacer esto en PERL sería:
fuente
Usé ~ 3 horas para generar esto. Tardaría 5 minutos en hacerlo en Unix. El problema principal era: espacios en los nombres de las carpetas de Win, imposibilidad de editar %% iy problema con la definición de vars en el bucle cmd de Win.
fuente
El fragmento de código C # anterior no funcionó para mí: tengo un cliente svn de tortuga y las líneas tienen un formato ligeramente diferente. Aquí está el mismo fragmento de código que el anterior, solo reescrito para funcionar y usar expresiones regulares.
fuente