Como faço para ignorar arquivos no Subversion?
Pergunta
Como faço para ignorar arquivos no Subversion?
Além disso, como faço para encontrar arquivos que não estão sob controle de versão?
Solução
(Esta resposta foi atualizado para coincidir com SVN 1,8 e comportamento 1.9 de)
Você tem 2 perguntas:
Marcação arquivos como ignorado:
Por "arquivo ignorado" Quero dizer o arquivo não aparecerá nas listagens mesmo como "sem versão":. Seu cliente SVN vai fingir que o arquivo não existe em tudo no sistema de arquivos
arquivos ignorados são especificadas por um "padrão de arquivo". A sintaxe e formato dos padrões de arquivos é explicado na documentação on-line do SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "Padrões de arquivo no Subversion".
Subversion, a partir da versão 1.8 (junho de 2013) e, mais tarde, suporta 3 maneiras diferentes de especificar padrões de arquivos. Aqui está um resumo com exemplos:
1 - Runtime Configuration Area - opção global-ignores
:
- Este é um client-side única ambiente, para que a sua lista
global-ignores
não será compartilhado por outros usuários, e aplica-se a todos os repos você check-out para o seu computador. - Esta configuração é definida no seu arquivo Runtime Configuration Area:
- (arquivo baseado em) Windows -
C:\Users\{you}\AppData\Roaming\Subversion\config
- Windows (Registro-based) -.
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
tantoHKLM
eHKCU
- Linux / Unix -
~/.subversion/config
- (arquivo baseado em) Windows -
2 - A propriedade svn:ignore
, que é definido em diretórios (não os arquivos):
- Este é armazenado dentro do repo, para que outros usuários terão o mesmo ignorar arquivos. Semelhante à forma como funciona
.gitignore
. -
svn:ignore
é aplicado aos diretórios e não é recursiva ou herdado. Qualquer arquivo ou imediato subdiretório do diretório pai que corresponde ao padrão de arquivos serão excluídos. -
Enquanto SVN 1,8 acrescenta o conceito de "propriedades herdadas", o próprio imóvel
svn:ignore
é ignorado em diretórios descendentes não imediatas:cd ~/myRepoRoot # Open an existing repo. echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt". svn status # Check to see if the file is ignored or not. > ? ./ignoreThis.txt > 1 unversioned file # ...it is NOT currently ignored. svn propset svn:ignore "ignoreThis.txt" . # Apply the svn:ignore property to the "myRepoRoot" directory. svn status > 0 unversioned files # ...but now the file is ignored! cd subdirectory # now open a subdirectory. echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt". svn status > ? ./subdirectory/ignoreThis.txt # ...and is is NOT ignored! > 1 unversioned file
(Assim, o
./subdirectory/ignoreThis
arquivo não é ignorado, mesmo que "ignoreThis.txt
" é aplicado na raiz.
repo). -
Portanto, para aplicar uma lista de ignorar de forma recursiva você deve usar
svn propset svn:ignore <filePattern> . --recursive
.- Isto irá criar uma cópia da propriedade em cada subdiretório.
- Se o valor
<filePattern>
é diferente em um diretório filho, em seguida, o valor da criança substitui completamente os pais, então não há nenhum efeito "aditivo". - Então, se você alterar o
<filePattern>
na.
raiz, em seguida, você deve alterá-lo com--recursive
para substituí-lo na criança e diretórios descendentes.
-
Faço notar que a sintaxe de linha de comando é um contra-senso.
- Eu comecei-off assumindo que você iria ignorar um arquivo no SVN digitando algo como
svn ignore pathToFileToIgnore.txt
no entanto isto não é como SVN de ignorar recurso funciona.
- Eu comecei-off assumindo que você iria ignorar um arquivo no SVN digitando algo como
3 A propriedade svn:global-ignores
. Requer SVN 1,8 (Junho de 2013):
- Isto é semelhante ao
svn:ignore
, exceto que ele faz uso de recurso "propriedades herdadas" SVN 1.8 do. - Compare com
svn:ignore
, o padrão de arquivo é aplicada automaticamente em cada diretório descendente (não apenas as crianças imediatos).- Isto significa que é necessário
svn:global-ignores
conjunto com a bandeira--recursive
, como herdou ignorar padrões de arquivos são aplicadas automaticamente como eles são herdados.
- Isto significa que é necessário
-
A execução do mesmo conjunto de comandos como no exemplo anterior, mas usando
svn:global-ignores
vez:cd ~/myRepoRoot # Open an existing repo echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt" svn status # Check to see if the file is ignored or not > ? ./ignoreThis.txt > 1 unversioned file # ...it is NOT currently ignored svn propset svn:global-ignores "ignoreThis.txt" . svn status > 0 unversioned files # ...but now the file is ignored! cd subdirectory # now open a subdirectory echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt" svn status > 0 unversioned files # the file is ignored here too!
Para usuários TortoiseSVN:
Este arranjo inteiro foi confuso para mim, porque a terminologia de TortoiseSVN (como o usado em seu sistema de menus do Windows Explorer) foi inicialmente enganosa para mim - eu não sabia o que o significado do menu Ignorar de "Adicionar forma recursiva", "Adicionar *" e op "Add"ções. Espero que este post explica como o recurso laços-in para o recurso Propriedades SVN Ignorar. Dito isto, eu sugiro usar a linha de comando para definir arquivos ignorados para que você ter uma idéia de como ele funciona em vez de usar a interface gráfica, e só usando a GUI para manipular as propriedades depois que você está confortável com a linha de comando.
Listagem arquivos que são ignorados:
O svn status
comando irá esconder arquivos ignorados (ou seja, arquivos que correspondem um padrão de RGA global-ignores
, ou correspondem ao padrão svn:ignore
de um diretório pai imediato ou correspondem ao padrão svn:global-ignores
qualquer diretório ancesor.
Use a opção --no-ignore
ver esses arquivos listados. arquivos ignorados ter um status de I
, em seguida, canalizar a saída para grep
para mostrar apenas as linhas que começam com "I".
O comando é:
svn status --no-ignore | grep "^I"
Por exemplo:
svn status
> ? foo # An unversioned file
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore
> ? foo # An unversioned file
> I ignoreThis.txt # A file matching an svn:ignore pattern
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore | grep "^I"
> I ignoreThis.txt # A file matching an svn:ignore pattern
ta-da!
Outras dicas
Use o seguinte comando para criar uma lista não sob arquivos de controle de versão.
svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
Em seguida, edite o arquivo para deixar apenas os arquivos que deseja realmente ignorar . Em seguida, use este ignorar os arquivos listados no arquivo:
svn propset svn:ignore -F ignoring.txt .
Observe o ponto no final da linha. Diz SVN que a propriedade está sendo definida no diretório atual.
Excluir o arquivo:
rm ignoring.txt
Finalmente cometer,
svn ci --message "ignoring some files"
Você pode então verificar quais arquivos são ignorados via:
svn proplist -v
Se você estiver usando TortoiseSVN , clique com o botão direito em um arquivo e selecione TortoiseSVN / Adicionar a ignorar lista ??strong>. Isto irá adicionar o arquivo / curinga para a propriedade svn:ignore
.
svn:ignore
será verificado quando você está verificando em arquivos, e arquivos correspondentes serão ignorados. Eu tenho a seguinte lista para um projeto Visual Studio .NET ignorar:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Você pode encontrar esta lista no menu de contexto em TortoiseSVN / Propriedades .
Você pode ignorar um arquivo ou pasta como .gitignore . Basta criar um arquivo de texto da lista de diretórios / arquivos que deseja ignorar e executar o código abaixo:
svn propset svn:ignore -F ignorelist.txt .
Ou se você não quiser usar um arquivo de texto, você pode fazê-lo como este:
svn propset svn:ignore "first
second
third" .
Fonte: Blog do Karsten - Set svn: ignore para vários arquivos de linha de comando
Eu encontrei o artigo .svnignore Exemplo para Java .
Exemplo: .svnignore para Ruby sobre trilhos,
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
E depois disso:
svn propset svn:ignore -F .svnignore .
Exemplos para .gitignore. Você pode usar para o seu .svnignore
Como ninguém parece ter mencionado isso ...
svn propedit svn:ignore .
Em seguida, edite o conteúdo do arquivo para especificar os padrões de ignorar, sair do editor e está tudo feito.
Ao usar propedit certifique-se não tem nenhum espaços à direita como que fará com que o arquivo a ser excluído da lista de ignorados.
Estas são inseridas automaticamente se você tiver uso guia-autocomplete no Linux para criar o arquivo para começar com:
svn propset svn:ignore 'file1
file2' .
Outra solução é:
svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt
ou linha por linha
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
O que faz:
- Obtém os arquivos de status do svn
- Salva todos os arquivos com ? para o arquivo "svnignore.txt"
- Obtém os arquivos já ignorados e acrescenta-los ao "svnignore.txt" arquivo
- Diz ao SVN para ignorar os arquivos em "svnignore.txt"
- Remove o arquivo
Além disso, se você usar o Tortoise SVN você pode fazer isso:
- No menu de contexto, selecione "TortoiseSVN", depois em "Propriedades"
- Em apareceu janela, clique em "New" e depois "Avançado"
- Em apareceu janela oposta a "Nome da propriedade", selecione ou digite "svn: ignorar", oposto ao "valor de propriedade" tipo nome desejado arquivo ou nome da pasta ou máscara de arquivo (no meu caso era "* / target"), clique em "Aplicar propriedade recursivamente"
- Ok. Ok.
- Commit
A versão mais legível de resposta de bkbilly:
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
O que faz:
- Obtém os arquivos de status do svn
- Salva todos os arquivos com ? para o arquivo "svnignore.txt"
- Obtém os arquivos já ignorados e acrescenta-los ao "svnignore.txt" arquivo
- Diz ao SVN para ignorar os arquivos em "svnignore.txt"
- Remove o arquivo
- cd ~ / .subversion
- configuração aberta ??li>
- encontrar a linha como '-ignora global'
- set ignorar tipo de arquivo como este:. Global-ignores = * .o * .lo * .la * .al .libs * .so .so [0-9] * .pyc * .pyo 88 * .rej ~ # #. # *. *. Swp .DS_Store node_modules saída
Você também pode definir um padrão de ignorar global no arquivo de configuração do SVN.
svn status
irá dizer-lhe quais arquivos não estão no SVN, bem como o que mudou.
Olhe para o propriedades SVN para a ignorar propriedade.
Para todas as coisas SVN, o livro vermelho é leitura obrigatória .
Adicionando um diretório para a subversão, e ignorando o diretório conteúdos
svn propset svn:ignore '\*.*' .
ou
svn propset svn:ignore '*' .
SVN ignore
é fácil de gerir em TortoiseSVN. Abrir TortoiseSVN e clique com o botão direito no menu Arquivo e selecione Adicionar à lista de ignorados.
Isto irá adicionar os arquivos na propriedade svn:ignore
.
Quando o check-in dos arquivos, em seguida, os arquivos que está combinado com svn:ignore
que será ignorado e não vai cometer.
Em projecto Visual Studio nós adicionamos seguinte arquivos para ignorar:
bin obj
*.exe
*.dll
*.pdb
*.suo
Estamos administrando código fonte no SVN do Comparetrap usando este método com sucesso
Use o comando svn estatuto na sua cópia de trabalho para mostrar o estado de arquivos, arquivos que ainda não estão sob controle de versão (e não ignoradas) terá um ponto de interrogação ao lado deles.
Como para ignorar arquivos que você precisa para editar o svn: ignorar propriedade, leia o capítulo Ignorando Itens Unversioned no svnbook em http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html . O livro também descreve mais sobre como usar svn status.
- abrir você usa JetBrains produto (ou seja. PyCharm)
- clique no botão 'commit' na barra de ferramentas superior ou uso atalho 'ctrl + k' screenshot_toolbar
- na interface cometer, move seus arquivos indesejados para outra lista de alterações da seguinte forma. screenshot_commit_change
- próxima vez que você só pode comprometer lista mudança padrão.