Pergunta

Eu tenho um script de compilação automatizado home-grown na forma de um arquivo de lote DOS. Na parte desse roteiro, eu check-out (com "check-out svn") uma seção de nosso repositório SVN que inclui um monte de coisas de terceiros que é usado em nossos projetos. Este arquivo de lote executado muito bem por um longo tempo, mas agora as pessoas têm verificado em lotes de fluff (docs, código de amostra, etc.) para a área de de terceiros ea parte check-out desse script conseguiu muito mais lento. Eu gostaria de mitigar este, verificando apenas as coisas que precisamos - arquivos principalmente dll no nosso caso. Então, minha pergunta é esta: qual é a melhor maneira de verificar um repositório SVN filtrados por extensão de arquivo

Eu não vi qualquer maneira óbvia de fazer isso no SVN ajuda. Eu tenho uma biblioteca de utilitários .NET que wraps svn.exe em alguns aspectos, e eu estava pensando em estender esse para recuperar apenas o conteúdo que combinava com minhas extensões de interesse. Mas eu prefiro usar um método mais fácil ou já existente, se houver.

Foi útil?

Solução

Isto é possível: você pode svn checkout um diretório vazio, e depois svn update filename para cada arquivo que você do deseja

.

Seu script pode fazer algo como:

  1. svn checkout svn://path/to/repos/directory --depth empty
  2. svn list --recursive svn://path/to/repos/directory
  3. Cachimbo esse resultado através de um filtro que remove as extensões de arquivo proibidos, por exemplo, grep
  4. iterar sobre esta nova lista filtrada e svn update --parents cada arquivo

Isso daria o resultado desejado de uma cópia de trabalho sem determinados arquivos ou extensões de arquivo.

Claro, há também a questão que você mencionou de “pessoas [verificar] em lotes de fluff”, mas isso é uma questão separada.

Outras dicas

Como eu disse aqui , há apenas uma compilação opção em si SVN: Um novo recurso no SVN 1,5 chamado escassa check-out , contudo, você pode selecionar apenas check-out no nível de diretório, então você tem que classificar os arquivos que você não precisa em um diretório diferente.

Você não pode verificar apenas alguns arquivos específicos - você só pode verificar uma pasta inteira. Você pode reorganizar a organização do que você está check-out, ou você só pode copiar uma cópia de trabalho de algum outro lugar e atualização.

Para uma implementação powershell específica da resposta do Michael Hackner , tente 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) }

Meu caso de uso específico aqui é encontrar um monte de arquivos com nomes semelhantes (neste caso * special.xml) e despejá-los todos em uma única pasta, com nomes essencialmente únicas. Eu tenho usado um arquivo intermediário para armazenar toda a repo lista, mas isso tudo poderia ser embutido assim se isso é melhor para você.

Eu apenas tentei a abordagem apresentada por Michael Hackner. Abaixo é a implementação de um sistema DOS. Note que você tem que fazer o checkout a pasta vazia antes de executar 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"
)

O mais simples e uma maneira correta de fazer isso: NÃO FAÇA!

Se houver alguma porcaria na pasta terceiros onde há suposto ser arquivos .dll que precisa ser check-out - remove essa porcaria para um local diferente! Ela não pertence aqui de qualquer maneira.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top