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?

Foi útil?

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 tanto HKLM e HKCU
    • Linux / Unix - ~/.subversion/config

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.

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.
  • 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 . 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

https://github.com/github/gitignore

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:

  1. Obtém os arquivos de status do svn
  2. Salva todos os arquivos com ? para o arquivo "svnignore.txt"
  3. Obtém os arquivos já ignorados e acrescenta-los ao "svnignore.txt" arquivo
  4. Diz ao SVN para ignorar os arquivos em "svnignore.txt"
  5. Remove o arquivo

Além disso, se você usar o Tortoise SVN você pode fazer isso:

  1. No menu de contexto, selecione "TortoiseSVN", depois em "Propriedades"
  2. Em apareceu janela, clique em "New" e depois "Avançado"
  3. 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"
  4. Ok. Ok.
  5. 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:

  1. Obtém os arquivos de status do svn
  2. Salva todos os arquivos com ? para o arquivo "svnignore.txt"
  3. Obtém os arquivos já ignorados e acrescenta-los ao "svnignore.txt" arquivo
  4. Diz ao SVN para ignorar os arquivos em "svnignore.txt"
  5. Remove o arquivo
  1. cd ~ / .subversion
  2. configuração aberta
  3. encontrar a linha como '-ignora global'
  4. 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.

  1. abrir você usa JetBrains produto (ou seja. PyCharm)
  2. clique no botão 'commit' na barra de ferramentas superior ou uso atalho 'ctrl + k' screenshot_toolbar
  3. na interface cometer, move seus arquivos indesejados para outra lista de alterações da seguinte forma. screenshot_commit_change
  4. próxima vez que você só pode comprometer lista mudança padrão.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top