SVN checkout ignorar pasta


Respostas:


104

Você não pode ignorar pastas diretamente em um checkout, mas pode usar checkouts esparsos no svn 1.5. Por exemplo:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

Isso verificará os arquivos e diretórios do tronco do seu projeto em 'my_checkout', mas não retornará a esses diretórios. Por exemplo:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

Então, para baixar o conteúdo de 'bar':

$ cd bar && svn update --set-depth infinity

Nota: houve um bug em algumas versões 1.5 que impediu isso comsvn: Shallowing of working copy depths is not yet supported
gcb

79

Sim, você pode usar o SVN 1.6. Você precisará fazer uma verificação primeiro, marcar a pasta para exclusão e excluir a pasta indesejada.

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

De agora em diante, qualquer atualização da cópia de trabalho não preencherá novamente a pasta docs.

Consulte http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ e http://subversion.apache.org/docs/release-notes/1.6.html#sparse- exclusão de diretório para obter mais detalhes.

Tom


2
Votei positivamente porque me salvou de ter que fazer checkout de uma pasta enorme que não era relevante para o meu trabalho.
dohpaz42 01 de

1
Isso é ótimo, junto com svn cleanup isso me economizou 12 GiB.
JonnyJD

1
Isso ainda não verifica tudo inicialmente?
Huangismo de

9

Com versões anteriores à 1.5, descobri que se você fizer checkout apenas da pasta superior e, em seguida, atualizar seletivamente, a partir de então as atualizações só afetarão o que você retirou. Ou seja,

svn co -N foo
cd foo
svn up -N bar
svn up

O sinalizador -N torna a operação não recursiva. O exemplo acima não verificará nada mais no nível foo, por exemplo. digamos que haja uma pasta lala, o svn up final não fará o check-out dessa pasta, mas será atualizado bar.

Mas mais tarde você pode svn up lalae, portanto, adiciona-o ao checkout.

Presumivelmente, isso também funciona com 1.5.


6

Isso está no cliente TortoiseSVN 1.7.1 (pode estar disponível em algumas versões mais antigas também):

  • Verificação do SVN -> Selecionar URL do repositório

  • Clique em "Checkout Items" (em Checkout Depth) e selecione apenas as pastas necessárias!


4

Você pode colocar a pasta docs em um repositório externo e depois usar svn checkout --ignore-externals.


Isso é o que acabamos fazendo para pular alguns componentes pré-construídos em um trabalho anterior.
Mark Bessey,

2
Eu não entendo o que isso external repositorysignifica. Você pode explicar isso?
Victor

4

Sim, o Subversion 1.5 tem um recurso chamado checkouts esparsos que pode fazer exatamente esse tipo de coisa.


2
Lendo isso, parece que checkouts esparsos apenas limitam a profundidade de um checkout. Eles não podem ignorar uma pasta específica.
John Millikin

Claro, você pode ter que fazer um pouco mais de trabalho braçal, como limitar a profundidade da pasta pai com --depth imediatos, e então verificar todas as outras pastas, exceto aquela que você gostaria de ignorar. A questão é que as ferramentas estão aí se você precisar usá-las.
Greg Hewgill

Agradeço a menção de SparseCheckouts, e é interessante com certeza, mas esta resposta não aborda a pergunta original. Claro, posso verificar um arquivo por vez, e isso resultará em cópias locais dos arquivos específicos que desejo, mas que chatice ter que fazer cada um individualmente. Acredito que o autor desta pergunta esteja perguntando sobre ignorar uma pasta específica, não a profundidade de x pastas, e permitir que o computador faça o trabalho - o mesmo trabalho que você está recomendando pode ser realizado manualmente.
barrypicker

As versões 1.6+ fornecem a habilidade adicional de ignorar pastas e mais controle geral do que incluir / excluir em uma cópia de trabalho (onde a v1.5 é muito limitada) svnbook.red-bean.com/en/1.7/svn. advanced.sparsedirs.html
FruitBreak

3

Eu encontrei esta pergunta procurando uma maneira de verificar as fontes do WebKit enquanto excluo os testes de regressão. Acabei com o seguinte:

svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
  --depth immediates

cd WebKit
find . \
  -maxdepth 1 -type d \
  -not -name '.*' \
  -not -name '*Tests' \
  -not -name 'Examples' \
  -not -name 'Websites' \
  | (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)

Observe que você pode alterar as exclusões conforme achar adequado, mas. * É recomendado pular o diretório de trabalho (que já está atualizado) e todos os diretórios .svn.


Que língua é essa?
Filhote de

estes são comandos do shell Unix (eles também podem ser salvos e executados como um arquivo de script)
mrlem

2

Resolvi recentemente a mesma tarefa. A ideia é obter a lista imediata de pastas / arquivos no repositório, excluir as entradas de que você precisa, verificar as pastas restantes e atualizar os arquivos imediatos, se houver. Aqui está a solução:

    # Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
    # This files are to be excluded (folders are ending with '/')
    # this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
    # Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
    # Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
    # Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
    # Initial nonrecursive checkout of repository - just empty
    # to the current (./) working directory
svn co $rpath ./ --depth empty && \
    # Update the files
svn up $files &&\
    # Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`

Mude para o diretório de trabalho de origem. Copie os comandos. Colar. Altere o URL apropriado e exclua o padrão. Execute o comando.

Obrigado,


1
Ei, o que são 6 anos para desenvolvedores? Em sua última linha você tem $ ubrpath. Onde isso está definido?
D-Klotz de

1
@ D-Klotz, obrigado, deve ser $ rpath, que por sua vez é definido para o caminho do repositório. <br/> Desculpe pelo atraso de um ano
bv.

1

Não, ignore é apenas para adicionar arquivos.
Você pode usar checkouts esparsos (se usar svn 1.5)


1

Como alguns outros mencionaram, você pode apenas usar svn: externals properties e então a opção --ignore-externals quando fizer o checkout. Uma coisa a se notar, entretanto, é que svn: externals não precisa necessariamente se referir a outro repositório. Pode ser uma referência a alguma outra pasta no mesmo repo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.