Posso ignorar uma pasta no svn checkout? Preciso ignorar a pasta DOCs no check-out no meu servidor de compilação.
editar: Ignorar externos não é uma opção. Tenho algumas coisas externas de que preciso.
Posso ignorar uma pasta no svn checkout? Preciso ignorar a pasta DOCs no check-out no meu servidor de compilação.
editar: Ignorar externos não é uma opção. Tenho algumas coisas externas de que preciso.
Respostas:
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
svn: Shallowing of working copy depths is not yet supported
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
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 lala
e, portanto, adiciona-o ao checkout.
Presumivelmente, isso também funciona com 1.5.
Você pode colocar a pasta docs em um repositório externo e depois usar svn checkout --ignore-externals
.
external repository
significa. Você pode explicar isso?
Sim, o Subversion 1.5 tem um recurso chamado checkouts esparsos que pode fazer exatamente esse tipo de coisa.
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.
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,
Não, ignore é apenas para adicionar arquivos.
Você pode usar checkouts esparsos (se usar svn 1.5)
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.