tutorial tortoise linea español comandos svn svn-checkout

linea - tortoise>- svn



SVN checkout filtrado por la extensión de archivo? (6)

No puede verificar solo algunos archivos específicos; solo puede consultar una carpeta completa. Puede reorganizar la organización de lo que está revisando, o puede simplemente copiar una copia de trabajo desde otro lugar y actualizar.

Tengo una secuencia de comandos automatizada de compilación en forma de un archivo por lotes de DOS. En parte de ese script, reviso (con "svn checkout") una sección de nuestro repositorio SVN que incluye un montón de cosas de terceros que se usan en nuestros proyectos. Este archivo por lotes funcionó bastante bien durante mucho tiempo, pero ahora la gente ha registrado un montón de pelusas (documentos, código de muestra, etc.) en el área de terceros y la parte de pago de esta secuencia de comandos se ha vuelto mucho más lenta. Me gustaría mitigar esto revisando solo las cosas que necesitamos, principalmente archivos dll en nuestro caso. Entonces, mi pregunta es esta: ¿cuál es la mejor manera de verificar un repositorio SVN filtrado por la extensión de archivo?

No vi ninguna forma obvia de hacer esto en la ayuda de svn. Tengo una biblioteca de utilidades .NET que envuelve svn.exe de alguna manera, y estaba pensando en extender esto para recuperar solo contenido que coincidiera con mis extensiones de interés. Pero preferiría usar un método más fácil o existente, si existe.


La manera más simple y correcta de hacerlo: ¡NO LO HAGAS!

Si hay alguna basura en la carpeta de terceros donde se supone que hay archivos .dll que deben ser procesados, ¡elimine esa basura en una ubicación diferente! No pertenece aquí de todos modos.


Esto es posible: puede svn checkout un directorio vacío, y luego svn update filename del svn update filename para cada archivo que desee.

Tu script puede hacer algo como:

  1. svn checkout svn://path/to/repos/directory --depth empty
  2. svn list --recursive svn://path/to/repos/directory
  3. Tubería que resulta a través de un filtro que elimina las extensiones de archivo prohibidas, p. Ej. grep
  4. Itera sobre esta nueva lista filtrada y svn update --parents each file

Eso le daría el resultado deseado de una copia de trabajo sin ciertos archivos o extensiones de archivo.

Por supuesto, también está el problema de que mencionas "gente [revisando] con mucha pelusa", pero ese es un asunto aparte.


Acabo de probar el enfoque presentado por Michael Hackner. A continuación se muestra la implementación de un sistema DOS. Tenga en cuenta que debe verificar la carpeta vacía antes de ejecutar este script.

@echo off svn list --recursive https://path_to_repository_folder | find /I ".sql" > filelist.txt REM Specify a custom delim. Otherwise space in filename will be treated as a delimiter. FOR /F "delims=|" %%i IN (filelist.txt) DO ( echo ------------- echo %%i svn update --parents "%%i" )


Como dije aquí , solo hay una opción compilada en SVN: una nueva característica en SVN 1.5 llamada extracción dispersa ; sin embargo, solo puedes seleccionar el pago a nivel de directorio, por lo que debes ordenar los archivos que no necesitas en un directorio diferente .


Para una implementación específica de powershell de la respuesta de Michael Hackner , intente algo como:

svn ls http://svn-server/src --recursive | Out-File svn.txt Get-Content ./svn.txt | where {$_.toLower().EndsWith(''special.xml'')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path = $_; Munged = $_.Replace(''/'', ''_'') } } | foreach { svn export "http://svn-server/src/$($_.Path)" $($_.Munged) }

Mi caso de uso particular aquí es encontrar un grupo de archivos con nombres similares (en este caso * special.xml) y volcarlos a todos en una sola carpeta, con nombres esencialmente únicos. He usado un archivo intermedio para almacenar todo el listado de repo, pero esto también podría incluirse si es mejor para ti.