Pregunta

Tengo una secuencia de comandos de compilación automatizada local 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 pelusa (documentos, código de muestra, etc.) en el área de terceros y la parte de pago de este script se ha vuelto mucho más lenta. Me gustaría mitigar esto revisando solo lo que necesitamos, principalmente archivos dll en nuestro caso. Entonces, mi pregunta es esta: ¿cuál es la mejor manera de revisar un repositorio SVN filtrado por extensión de archivo?

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

¿Fue útil?

Solución

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

Su script puede hacer algo como:

  1. svn checkout svn: // ruta / al / repos / directorio - profundidad vacía
  2. svn list - svn recursivo: // ruta / al / repos / directorio
  3. Canalice el resultado a través de un filtro que elimina las extensiones de archivo prohibidas, p. grep
  4. Iterar sobre esta nueva lista filtrada y svn update --parents cada archivo

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

Por supuesto, también existe el problema que usted menciona de "las personas [controlando] con mucha pelusa", pero eso es un asunto separado.

Otros consejos

Como le dije a aquí , solo hay una opción integrada en SVN: una nueva función en SVN 1.5 llamada pago escaso , sin embargo, solo puede seleccionar el pago a nivel de directorio, por lo que debe ordenar los archivos que no necesita en un directorio diferente.

No puede retirar solo unos pocos archivos específicos, solo puede retirar una carpeta completa. Puede reorganizar la organización de lo que está revisando, o simplemente puede copiar una copia de trabajo de otro lugar y actualizarla.

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 {

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

<*>

Mi caso de uso particular aquí es encontrar un montón 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 la lista completa de repositorios, pero esto también podría estar incluido si eso es mejor para usted.

.toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path =

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

<*>

Mi caso de uso particular aquí es encontrar un montón 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 la lista completa de repositorios, pero esto también podría estar incluido si eso es mejor para usted.

; Munged =

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

<*>

Mi caso de uso particular aquí es encontrar un montón 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 la lista completa de repositorios, pero esto también podría estar incluido si eso es mejor para usted.

.Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$(

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

<*>

Mi caso de uso particular aquí es encontrar un montón 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 la lista completa de repositorios, pero esto también podría estar incluido si eso es mejor para usted.

.Path)" $(

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

<*>

Mi caso de uso particular aquí es encontrar un montón 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 la lista completa de repositorios, pero esto también podría estar incluido si eso es mejor para usted.

.Munged) }

Mi caso de uso particular aquí es encontrar un montón 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 la lista completa de repositorios, pero esto también podría estar incluido si eso es mejor para usted.

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 pagar 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"
)

La forma más simple y correcta de hacer esto: ¡NO LO HAGAS!

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

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