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 version control?

(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 syntax e o formato dos padrões de arquivo são explicados na documentação on-line 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 do lado do cliente , portanto, sua lista de global-ignores não será compartilhada por outros usuários e se aplica a todos os repositorys que você registrou em seu computador.
  • Essa configuração é definida em seu arquivo Área de Configuração de Tempo de Execução:
    • Windows (baseado em arquivo) – C:\Users\{you}\AppData\Roaming\Subversion\config
    • O 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 nos diretórios (não nos arquivos):

  • Isso é armazenado no repository, para que outros usuários tenham os mesmos arquivos de ignorar. Semelhante a como funciona o .gitignore .
  • svn:ignore é aplicado aos diretórios e não é recursivo ou herdado. Qualquer arquivo ou subdiretório imediato do 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 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 ignoreThis.txt ).

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

    • Isso criará uma cópia da propriedade em cada subdiretório.
    • Se o valor for diferente em um diretório filho, o valor do filho substitui completamente os pais, portanto, não há efeito “aditivo”.
    • Então, se você alterar o na raiz . , então você deve alterá-lo com --recursive para sobrescrevê-lo nos diretórios filho e descendente.
  • Observo que a syntax 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):

  • Isto é semelhante ao svn:ignore , exceto que faz uso do 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 em 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 como no 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:

Este 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 definir 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 esconderá arquivos ignorados (isto é, arquivos que correspondem a um padrão RGA global-ignores svn:ignore ou corresponderá ao padrão svn:ignore um diretório pai imediato ou corresponderá a qualquer padrão svn:global-ignores 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 , em seguida, canalizam a saída para o 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!

Use o seguinte comando para criar uma lista que não esteja nos arquivos de version control.

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

Em seguida, edite o arquivo para deixar apenas os arquivos que você 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 

Se você estiver usando o TortoiseSVN , clique com o botão direito em um arquivo e selecione TortoiseSVN / Add to ignore list . Isso adicionará o arquivo / curinga à propriedade svn:ignore .

svn:ignore será verificado quando você estiver efetuando 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 .NET:

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

Pode encontrar esta lista no menu de contexto em TortoiseSVN / Properties .

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 da Karsten – Definir svn: ignorar para vários arquivos da linha de comando

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

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

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

 svn propset svn:ignore 'file1 file2' . 

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.

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

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

Além disso, se você usar o Tortoise SVN, você pode 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

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

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

Veja as propriedades do SVN para a propriedade ignore.

Para todas as coisas SVN, o Livro Vermelho é leitura obrigatória.

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

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

ou

 svn propset svn:ignore '*' . 

O SVN ignore é fácil de gerir no TortoiseSVN. Abra o TortoiseSVN e clique com o botão direito no menu de arquivos e selecione Adicionar à lista de ignorados.

Isto irá adicionar os arquivos na propriedade svn:ignore . Quando nós checamos os arquivos, então aquele arquivo que é combinado com svn:ignore , será ignorado e não será submetido.

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

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

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

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 version control (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.

  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 node_modules saída
  1. open you use 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 maneira. screenshot_commit_change
  4. da próxima vez, você só poderá confirmar a lista de alterações padrão.