it-swarm-pt.tech

Como eu ignoro arquivos no Subversion?

Como eu ignoro arquivos no Subversion?

Além disso, como faço para encontrar arquivos que não estão sob controle de versão?

589
andyuk

(Esta resposta foi atualizada para corresponder ao comportamento do SVN 1.8 e 1.9)

Você tem 2 perguntas:

Marcando arquivos como ignorados:

Por "arquivo ignorado" quero dizer que o arquivo não aparecerá em listas, mesmo como "não-versionado": seu cliente SVN fingirá que o arquivo não existe no sistema de arquivos.

Arquivos ignorados são especificados por um "padrão de arquivo". A sintaxe e o formato dos padrões de arquivo são explicados na documentação online do SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "File Patterns in Subversion ".

O Subversion, a partir da versão 1.8 (junho de 2013) e posterior, suporta três maneiras diferentes de especificar padrões de arquivo. Aqui está um resumo com exemplos:

1 - Área de Configuração do Tempo de Execução - opção global-ignores:

  • Esta é uma configuração apenas para o lado do cliente, portanto, sua lista global-ignores não será compartilhada por outros usuários e se aplica a todas as repo que você registrou em seu computador.
  • Essa configuração é definida no arquivo Área de Configuração de Tempo de Execução:
    • Windows (baseado em arquivo) - C:\Users\{you}\AppData\Roaming\Subversion\config
    • Windows (baseado em registro) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores em HKLM e HKCU.
    • Linux/Unix - ~/.Subversion/config

2 - A propriedade svn:ignore, que é definida em diretórios (não em arquivos):

  • Isso é armazenado dentro do repositório, para que outros usuários tenham os mesmos arquivos de ignorar. Semelhante a como .gitignore funciona.
  • svn:ignore é aplicado aos diretórios e não é recursivo ou herdado. Qualquer arquivo ou subdiretório imediatodo diretório pai que corresponde ao Padrão de Arquivo será excluído.
  • Enquanto o SVN 1.8 adiciona o conceito de "propriedades herdadas", a própria propriedade svn:ignore é ignorada em diretórios descendentes não imediatos:

    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
    

    (Portanto, o arquivo ./subdirectory/ignoreThis não é ignorado, embora "ignoreThis.txt" seja aplicado na raiz do repo .).

  • Portanto, para aplicar uma lista de ignorados recursivamente, você deve usar svn propset svn:ignore <filePattern> . --recursive.

    • Isso criará uma cópia da propriedade em cada subdiretório.
    • Se o valor <filePattern> for diferente em um diretório filho, o valor da criança substitui completamente os pais, portanto, não há efeito "aditivo".
    • Então, se você alterar o <filePattern> na raiz ., deverá alterá-lo com --recursive para sobrescrevê-lo nos diretórios filho e descendente.
  • Observo que a sintaxe da linha de comando é contra-intuitiva.

    • Eu comecei supondo que você iria ignorar um arquivo no SVN, digitando algo como svn ignore pathToFileToIgnore.txt no entanto, isso não é como o recurso de ignorar do SVN funciona.

3- A propriedade svn:global-ignores. Requer SVN 1.8 (junho de 2013):

  • Isso é semelhante a svn:ignore, exceto que ele usa o recurso "propriedades herdadas" do SVN 1.8.
  • Compare com svn:ignore, o padrão de arquivo é aplicado automaticamente em todos os diretórios descendentes (não apenas nos filhos imediatos).
    • Isso significa que é desnecessário definir svn:global-ignores com o sinalizador --recursive, pois os padrões de arquivo ignorados herdados são aplicados automaticamente à medida que são herdados.
  • Executando o mesmo conjunto de comandos do exemplo anterior, mas usando svn:global-ignores:

    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 do TortoiseSVN:

Esse arranjo inteiro foi confuso para mim, porque a terminologia do TortoiseSVN (como usado no sistema de menus do Windows Explorer) foi inicialmente enganosa para mim - eu não tinha certeza do significado dos menus "Adicionar recursivamente", "Adicionar *" e "Adicionar" do menu Ignorar opções. Espero que esta postagem explique como o recurso Ignorar se vincula ao recurso Propriedades do SVN. Dito isso, sugiro usar a linha de comando para configurar arquivos ignorados para que você tenha uma ideia de como funciona, em vez de usar a GUI e usar apenas a GUI para manipular propriedades depois de se familiarizar com a linha de comando.

Listando arquivos que são ignorados:

O comando svn status ocultará arquivos ignorados (ou seja, arquivos que correspondem a um padrão RGA global-ignores, ou correspondem a um padrão svn:ignore do diretório pai imediato ou correspondem a qualquer padrão svn:global-ignores do diretório ancesor.

Use a opção --no-ignore para ver esses arquivos listados. Os arquivos ignorados têm um status de I e, em seguida, canalizam 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!

690
andyuk

Use o comando a seguir para criar uma lista que não esteja nos arquivos de controle de versão.

svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt

Em seguida, edite o arquivo para deixe apenas os arquivos que deseja ignorar . Então use este para ignorar os arquivos listados no arquivo:

svn propset svn:ignore -F ignoring.txt .

Observe o ponto no final da linha. Diz ao SVN que a propriedade está sendo definida no diretório atual.

Exclua o arquivo:

rm ignoring.txt

Finalmente commit,

svn ci --message "ignoring some files"

Você pode então verificar quais arquivos são ignorados via:

svn proplist -v
76
ulitosCoder

Se estiver a utilizar o TortoiseSVN , clique com o botão direito do rato num ficheiro e depois seleccione a opção TortoiseSVN/Add to ignore list. Isso adicionará o arquivo/curinga à propriedade svn:ignore.

svn:ignore será verificado quando você fizer o check-in dos arquivos e os arquivos correspondentes serão ignorados. Eu tenho a seguinte lista de ignorados para um projeto do Visual Studio.

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

Você pode encontrar esta lista no menu de contexto em TortoiseSVN/Properties.

47
artur02

Você pode ignorar um arquivo ou diretório como .gitignore. Basta criar um arquivo de texto da lista de diretórios/arquivos que você 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 fazer assim:

svn propset svn:ignore "first
 second
 third" .

Fonte: Blog de Karsten - Definir svn: ignorar para vários arquivos da linha de comando

36
Adrian Enriquez

Eu encontrei o artigo .svnignore Exemplo para Java.

Exemplo: .svnignore para Ruby on Rails,

/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

21
d.danailov

Como ninguém parece ter mencionado isso ...

svn propedit svn:ignore .

Em seguida, edite o conteúdo do arquivo para especificar os padrões a serem ignorados, saia do editor e pronto.

15
Yorick

Ao usar o propedit, certifique-se de não ter espaços à direita, pois isso fará com que o arquivo seja excluído da lista de ignorados.

Estes são inseridos automaticamente se você usar o autocompletar tab-linux no linux para criar o arquivo para começar:

svn propset svn:ignore 'file1
file2' .
10
Kenneth

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 os anexa ao arquivo "svnignore.txt"
  4. Diz ao svn para ignorar os arquivos em "svnignore.txt"
  5. Remove o arquivo
8
bkbilly

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

  1. No menu de contexto, selecione "TortoiseSVN", depois "Propriedades"
  2. Na janela exibida, clique em "Novo" e depois em "Avançado"
  3. Na janela exibida ao lado de "Nome da propriedade", selecione ou digite "svn: ignore", ao lado de "Valor da propriedade" digite o nome do arquivo desejado ou nome da pasta ou máscara de arquivo (no meu caso era "*/target"), clique em "Aplicar propriedade recursivamente "
  4. Está bem. Está bem.
  5. Commit
7
msangel

Uma versão mais legível da resposta do 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 os anexa ao arquivo "svnignore.txt"
  4. Diz ao svn para ignorar os arquivos em "svnignore.txt"
  5. Remove o arquivo
5
LivingDust
  1. cd ~/.Subversion
  2. configuração aberta
  3. encontre a linha como 'global-ignores'
  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 saída node_modules
4
范陆离

O SVN ignore é fácil de gerir no TortoiseSVN. Abra o TortoiseSVN e clique com o botão direito do mouse no menu de arquivos e selecione Add to ignore list.

Isso adicionará os arquivos na propriedade svn:ignore. Quando fizermos o check-in dos arquivos, o arquivo correspondente a svn:ignore será ignorado e não será confirmado.

No projeto do Visual Studio, adicionamos os seguintes arquivos para ignorar:

bin obj
*.exe
*.dll
*.pdb
*.suo

Estamos gerenciando código-fonte no SVN de Comparetrap usando este método com sucesso

3
Slack

svn status dirá quais arquivos não estão no SVN, bem como o que foi alterado.

Olhe para as propriedades SVN para a propriedade ignore.

Para todas as coisas SVN, o Red Book é leitura obrigatória.

3
DGM

Você também pode definir um padrão de ignorar global no arquivo de configuração do SVN.

3
petr k.

Adicionando um diretório ao Subversion e ignorando o conteúdo do diretório

svn propset svn:ignore '\*.*' .

ou

svn propset svn:ignore '*' .
3
Al Conrad

Use o comando svn status em sua cópia de trabalho para mostrar o status dos arquivos, arquivos que ainda não estão sob controle de versão (e não ignorados) terão um ponto de interrogação próximo a eles.

Quanto a ignorar arquivos você precisa editar a propriedade svn: ignore, leia o capítulo Ignorando Itens Não-versionados 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 o status svn.

2
Andreas Holstenson
  1. open você usa o produto JetBrains (ou seja, Pycharm)
  2. clique no botão 'commit' na barra de ferramentas superior ou use o atalho 'ctrl + k' screenshot_toolbar
  3. na interface de confirmação, mova seus arquivos indesejados para outra lista de alterações da seguinte forma: screenshot_commit_change
  4. na próxima vez, você só poderá confirmar a lista de alterações padrão.
0
G. Googol