É divertido ver como cada pergunta simples (provavelmente de um usuário do git) significa muitas respostas complicadas. Se isso acontecer, é o Subversion, querida.
Valerio Bozz
Respostas:
738
(Esta resposta foi atualizada para corresponder ao comportamento dos 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á nas listas mesmo como "não versionado": seu cliente SVN fingirá que o arquivo não existe no sistema de arquivos.
O Subversion, a partir da versão 1.8 (junho de 2013) e posterior, suporta três maneiras diferentes de especificar padrões de arquivos. Aqui está um resumo com exemplos:
1 - Área de Configuração do Tempo de Execução - global-ignoresopção:
Essa é uma configuração somente do lado do cliente , portanto, o seuglobal-ignores lista não seja compartilhada por outros usuários, e se aplica a todos os repositórios que você faz checkout no seu computador.
Essa configuração é definida no arquivo da área de configuração do 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-ignoresem ambos HKLMe HKCU.
Linux / Unix - ~/.subversion/config
2 - A svn:ignorepropriedade, que está definida nos diretórios (não nos arquivos):
Isso é armazenado no repositório, para que outros usuários tenham os mesmos arquivos de ignorados. Semelhante a como .gitignorefunciona.
svn:ignoreé aplicado aos diretórios e não é recursivo ou herdado. Qualquer arquivo ou imediato subdiretório diretório pai que corresponda ao padrão de arquivo será excluído.
Enquanto o SVN 1.8 adiciona o conceito de "propriedades herdadas", a svn:ignoreprópria propriedade é ignorada nos 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/ignoreThisnão é ignorado, mesmo que " ignoreThis.txt" seja aplicado na .raiz do repositório).
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 todos os subdiretórios.
Se o <filePattern>valor for diferente em um diretório filho, o valor da criança substituirá completamente os pais, portanto, não haverá efeito "aditivo".
Portanto, se você alterar o <filePattern>na raiz ., deverá alterá-lo com --recursivepara substituí-lo nos diretórios filho e descendente.
Observo que a sintaxe da linha de comando é contra-intuitiva.
Comecei assumindo que você ignoraria um arquivo no SVN digitando algo como, svn ignore pathToFileToIgnore.txtno entanto, não é assim que o recurso de ignorar do SVN funciona.
3- A svn:global-ignorespropriedade. Requer SVN 1.8 (junho de 2013):
É semelhante a 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 nos filhos imediatos).
Isso significa que é desnecessário definir svn:global-ignorescom o --recursivesinalizador, pois os padrões de arquivos ignorados herdados são aplicados automaticamente à medida que são herdados.
Executando o mesmo conjunto de comandos que 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:
Todo esse arranjo foi confuso para mim, porque a terminologia do TortoiseSVN (usada no sistema de menus do Windows Explorer) era inicialmente enganosa para mim - eu não tinha certeza do significado do menu "Adicionar recursivamente", "Adicionar *" e "Adicionar" do menu Ignorar opções Espero que este post explique como o recurso Ignorar se vincula ao recurso SVN Properties. Dito isso, sugiro o uso da linha de comando para definir arquivos ignorados, para que você tenha uma idéia de como ele funciona, em vez de usar a GUI, e use apenas a GUI para manipular propriedades depois de se sentir confortável com a linha de comando.
Listando arquivos que são ignorados:
O comando svn statusocultará arquivos ignorados (ou seja, arquivos que correspondam a um global-ignorespadrão RGA , ou que correspondam ao padrão de um diretório pai imediato svn:ignoreou que correspondam a qualquer svn:global-ignorespadrão do diretório do ancesor .
Use a --no-ignoreopção para ver os arquivos listados. Os arquivos ignorados têm um status de I, em seguida, canalize a saída para grepmostrar apenas as linhas começando 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
Para localizar arquivos ignorados: svn status -u -v --no-ignore | grep "^ I" | awk "{print \ $ 2}"
Christian Madsen
3
Se você deseja ignorar o arquivo ./FolderA/FolderB/FileToIgnore, faça isso a partir do seu. pasta: svn propset svn: ignore "FileToIgnore" FolderA / FolderB /
jnj
8
se você estiver ssh'ing svn propedit svn:ignore .e nenhum editor de texto estiver configurado, você receberá uma mensagem de erro dizendo svn: E205007: Nenhuma das variáveis de ambiente SVN_EDITOR, VISUAL ou EDITOR está definida e nenhuma opção de configuração de tempo de execução 'editor-cmd' foi encontrado em vez de abrir um editor. Então, apenas especifique --editor-cmd nano como este #svn propedit svn:ignore . --editor-cmd nano
Jonathan Morales Vélez
12
Você também pode ignorar arquivos com um nome de arquivo específico em todas as subpastas usando o argumento "--recursive". ie svn propset svn: ignore "* .jpg". --recursivo
Templário
2
Uma alternativa mais simples para awk é grep:svn status | grep '^?'
Johnride
91
Use o comando a seguir para criar uma lista que não esteja nos arquivos de controle de versão.
Em seguida, edite o arquivo para deixar apenas os arquivos que você deseja realmente ignorar . Em seguida, 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 comprometa,
svn ci --message "ignoring some files"
Você pode então verificar quais arquivos são ignorados via:
Agradável. Uma pequena melhoria é svn status | awk "/^?/ {print \$2}" > ignoring.txt.
Dirk Eddelbuettel
4
por que excluir o arquivo? mantê-lo em repo se u precisa re criar / adicionar / remover
tgkprog
Observe que esta solução não ignorará os arquivos nos subdiretórios (mesmo que eles apareçam no arquivo ignoring.txt).
Shaneb 24/04
Isso manteria os ignora existentes? Caso contrário, como fazê-lo em um comando (ou seja, --no-ignora e também manter linhas precedidas por I)?
a1an
Isso sobrescreveria as ignições atuais, tente: svn pg svn:ignore . >> ignore.txtapós o primeiro comando para acrescentar as ignições atuais ao arquivo.
ulitosCoder
55
.gitignore como abordagem
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, faça o seguinte:
Note que se você posteriormente modificar seu arquivo de ignorar, você precisa executar novamente o svn:ignorecomando (ver stackoverflow.com/a/58380306/189518 )
Sensei James
50
Se você estiver usando o TortoiseSVN , clique com o botão direito do mouse em um arquivo e selecione TortoiseSVN / Adicionar à lista de ignorados . Isso adicionará o arquivo / curinga aosvn:ignore propriedade
svn:ignoreserá verificado quando você estiver registrando 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
Você pode encontrar esta lista no menu de contexto em TortoiseSVN / Properties .
Esta resposta foi útil. No meu caso, eu precisava mudar "." para o subdiretório do arquivo que eu queria ignorar e apenas especifique o padrão do arquivo. Além disso, pela primeira vez, eu precisava executar este (eu estou no Mac): export SVN_EDITOR = "nano"
Eu fiz como você disse ... mas quando executo o status svn. ainda mostra os arquivos ignorados com "?"
Harshit Gupta 27/03
Eu nunca verifiquei com o status svn, mas com o svn add * e depois disso o svn commit, ignorar arquivos, não é commit.
d.danailov
se um arquivo "a.txt" já estiver no controle de versão, a ignição será feita pelo comando "svn propset svn: ignore -F .svnignore a.txt"? está correto ?
errakeshpd
Se você adicionar "a.txt" no seu arquivo .svnignore, não tenho certeza, mas o comando deve ser corretamente.
d.danailov
10
Ao usar o propedit, verifique se não há espaços à direita, pois isso fará com que o arquivo seja excluído da lista de ignorados.
Eles serão inseridos automaticamente se você usar o preenchimento automático de tabulação no linux para criar o arquivo, para começar:
Além disso, se você usar o Tortoise SVN, poderá fazer o seguinte:
No menu de contexto, selecione "TortoiseSVN" e, em seguida, "Propriedades"
Na janela exibida, clique em "Novo", depois em "Avançado"
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 o nome da pasta ou a máscara do arquivo (no meu caso, era "* / target"), clique em "Aplicar propriedade recursivamente "
Obrigado, sua resposta é a única que menciona o configarquivo.
Henrique de Sousa
Esta resposta também menciona @HenriquedeSousa stackoverflow.com/a/86052/7724 e também explica que é uma maneira local apenas de cliente de ignorar arquivos.
Gosto da resposta do bkbilly, mas esta versão quebra cada linha para torná-la mais legível e remove o && que em meus testes não fez nada, já que a primeira linha sempre cria o arquivo temporário, e esse mesmo arquivo temporário sempre entra na lista de ignorados.
LivingDust 01/12/16
Uma proposição de edição seria mais apropriada nesse caso. Aprecie o esforço!
Jim
Ainda não tinha reputação suficiente para sugerir uma edição. mas não quero estragar um bom protocolo. Existe um README simples sobre diretrizes para quando é melhor sugerir e editar, em vez de postar uma nova resposta etc?
LivingDust 12/12
1
Se a sua resposta for exatamente a mesma que a postada há um ano e meio, é bem simples. Você até copiou a explicação " O que faz ".
Jim
3
Você também pode definir um padrão de ignição global no arquivo de configuração do SVN.
Use o comando svn status em sua cópia de trabalho para mostrar o status dos arquivos, os arquivos que ainda não estão sob controle de versão (e não são ignorados) terão um ponto de interrogação ao lado deles.
SVN ignore é fácil de gerenciar no TortoiseSVN. Abra o TortoiseSVN e clique com o botão direito do mouse no menu arquivo e selecione Adicionar à lista de ignorados.
Isso adicionará os arquivos na svn:ignorepropriedade Ao fazer o check-in dos arquivos, os arquivos correspondentes asvn:ignore serão ignorados e não serão confirmados.
No projeto 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 esse método com êxito
Como ignoro arquivos no Subversion?
1.No File Explorer, clique com o botão direito do mouse no nome da pasta do projeto SVN
2.Clique em "SVN Commit ..."
3.A janela "commit" será exibida
4.Clique com o botão direito do mouse na pasta / arquivo que você deseja ignorar
5.Clique em Adicionar à lista de ignorados
6.Selecione a pasta / arquivo
7.Commit a "alteração de propriedade" para SVN
Além disso, como localizo arquivos que não estão sob controle de versão?
Após a Etapa 3 acima, clique em "Mostrar arquivos não versionados"
Respostas:
(Esta resposta foi atualizada para corresponder ao comportamento dos 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á nas 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 "Padrões de arquivo no 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 arquivos. Aqui está um resumo com exemplos:
1 - Área de Configuração do Tempo de Execução -
global-ignores
opção:global-ignores
lista não seja compartilhada por outros usuários, e se aplica a todos os repositórios que você faz checkout no seu computador.C:\Users\{you}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
em ambosHKLM
eHKCU
.~/.subversion/config
2 - A
svn:ignore
propriedade, que está definida nos diretórios (não nos arquivos):.gitignore
funciona.svn:ignore
é aplicado aos diretórios e não é recursivo ou herdado. Qualquer arquivo ou imediato subdiretório diretório pai que corresponda ao padrão de arquivo será excluído.Enquanto o SVN 1.8 adiciona o conceito de "propriedades herdadas", a
svn:ignore
própria propriedade é ignorada nos diretórios descendentes não imediatos:(Portanto, o arquivo
./subdirectory/ignoreThis
não é ignorado, mesmo que "ignoreThis.txt
" seja aplicado na.
raiz do repositório).Portanto, para aplicar uma lista de ignorados recursivamente, você deve usar
svn propset svn:ignore <filePattern> . --recursive
.<filePattern>
valor for diferente em um diretório filho, o valor da criança substituirá completamente os pais, portanto, não haverá efeito "aditivo".<filePattern>
na raiz.
, deverá alterá-lo com--recursive
para substituí-lo nos diretórios filho e descendente.Observo que a sintaxe da linha de comando é contra-intuitiva.
svn ignore pathToFileToIgnore.txt
no entanto, não é assim que o recurso de ignorar do SVN funciona.3- A
svn:global-ignores
propriedade. Requer SVN 1.8 (junho de 2013):svn:ignore
, exceto que faz uso do recurso "propriedades herdadas" do SVN 1.8.svn:ignore
, o padrão de arquivo é aplicado automaticamente em todos os diretórios descendentes (não apenas nos filhos imediatos).svn:global-ignores
com o--recursive
sinalizador, pois os padrões de arquivos ignorados herdados são aplicados automaticamente à medida que são herdados.Executando o mesmo conjunto de comandos que no exemplo anterior, mas usando
svn:global-ignores
:Para usuários do TortoiseSVN:
Todo esse arranjo foi confuso para mim, porque a terminologia do TortoiseSVN (usada no sistema de menus do Windows Explorer) era inicialmente enganosa para mim - eu não tinha certeza do significado do menu "Adicionar recursivamente", "Adicionar *" e "Adicionar" do menu Ignorar opções Espero que este post explique como o recurso Ignorar se vincula ao recurso SVN Properties. Dito isso, sugiro o uso da linha de comando para definir arquivos ignorados, para que você tenha uma idéia de como ele funciona, em vez de usar a GUI, e use apenas a GUI para manipular propriedades depois de se sentir confortável com a linha de comando.
Listando arquivos que são ignorados:
O comando
svn status
ocultará arquivos ignorados (ou seja, arquivos que correspondam a umglobal-ignores
padrão RGA , ou que correspondam ao padrão de um diretório pai imediatosvn:ignore
ou que correspondam a qualquersvn:global-ignores
padrão do diretório do ancesor .Use a
--no-ignore
opção para ver os arquivos listados. Os arquivos ignorados têm um status deI
, em seguida, canalize a saída paragrep
mostrar apenas as linhas começando com "I".O comando é:
Por exemplo:
ta-da!
fonte
svn propedit svn:ignore .
e nenhum editor de texto estiver configurado, você receberá uma mensagem de erro dizendo svn: E205007: Nenhuma das variáveis de ambiente SVN_EDITOR, VISUAL ou EDITOR está definida e nenhuma opção de configuração de tempo de execução 'editor-cmd' foi encontrado em vez de abrir um editor. Então, apenas especifique --editor-cmd nano como este #svn propedit svn:ignore . --editor-cmd nano
svn status | grep '^?'
Use o comando a seguir para criar uma lista que não esteja nos arquivos de controle de versão.
Em seguida, edite o arquivo para deixar apenas os arquivos que você deseja realmente ignorar . Em seguida, use este para ignorar os arquivos listados no arquivo:
Observe o ponto no final da linha. Diz ao SVN que a propriedade está sendo definida no diretório atual.
Exclua o arquivo:
Finalmente comprometa,
Você pode então verificar quais arquivos são ignorados via:
fonte
svn status | awk "/^?/ {print \$2}" > ignoring.txt
.svn pg svn:ignore . >> ignore.txt
após o primeiro comando para acrescentar as ignições atuais ao arquivo..gitignore como abordagem
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:
OU, se você não quiser usar um arquivo de texto, faça o seguinte:
Fonte: Blog de Karsten - Defina svn: ignore para vários arquivos da linha de comando
fonte
svn:ignore
comando (ver stackoverflow.com/a/58380306/189518 )Se você estiver usando o TortoiseSVN , clique com o botão direito do mouse em um arquivo e selecione TortoiseSVN / Adicionar à lista de ignorados . Isso adicionará o arquivo / curinga ao
svn:ignore
propriedadesvn:ignore
será verificado quando você estiver registrando arquivos e os arquivos correspondentes serão ignorados. Eu tenho a seguinte lista de ignorados para um projeto do Visual Studio .NET:Você pode encontrar esta lista no menu de contexto em TortoiseSVN / Properties .
fonte
Como ninguém parece ter mencionado isso ...
Em seguida, edite o conteúdo do arquivo para especificar os padrões a serem ignorados, saia do editor e pronto.
fonte
Encontrei o artigo .svnignore Example for Java .
Exemplo: .svnignore para Ruby on Rails,
E depois disso:
Exemplos para .gitignore. Você pode usar para o seu .svnignore
https://github.com/github/gitignore
fonte
Ao usar o propedit, verifique se não há espaços à direita, pois isso fará com que o arquivo seja excluído da lista de ignorados.
Eles serão inseridos automaticamente se você usar o preenchimento automático de tabulação no linux para criar o arquivo, para começar:
fonte
Outra solução é:
ou linha por linha
O que faz:
fonte
Além disso, se você usar o Tortoise SVN, poderá fazer o seguinte:
fonte
fonte
config
arquivo.Uma versão mais legível da resposta de bkbilly:
O que faz:
fonte
Você também pode definir um padrão de ignição global no arquivo de configuração do SVN.
fonte
svn status
lhe dirá quais arquivos não estão no SVN, bem como o que foi alterado.Observe as propriedades SVN da propriedade ignore.
Para todas as coisas SVN, o Red Book é leitura obrigatória.
fonte
Adicionando um diretório ao subversion e ignorando o conteúdo do diretório
ou
fonte
Use o comando svn status em sua cópia de trabalho para mostrar o status dos arquivos, os arquivos que ainda não estão sob controle de versão (e não são ignorados) terão um ponto de interrogação ao lado deles.
Quanto a ignorar arquivos, você precisa editar a propriedade svn: ignore, leia o capítulo Ignorando Itens Nãoversionados no svnbook em http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore. html . O livro também descreve mais sobre o uso do status svn.
fonte
SVN
ignore
é fácil de gerenciar no TortoiseSVN. Abra o TortoiseSVN e clique com o botão direito do mouse no menu arquivo e selecione Adicionar à lista de ignorados.Isso adicionará os arquivos na
svn:ignore
propriedade Ao fazer o check-in dos arquivos, os arquivos correspondentes asvn:ignore
serão ignorados e não serão confirmados.No projeto Visual Studio, adicionamos os seguintes arquivos para ignorar:
Estamos gerenciando o código-fonte no SVN do Comparetrap usando esse método com êxito
fonte
O que funcionou para mim:
Como ignoro arquivos no Subversion?
1.No File Explorer, clique com o botão direito do mouse no nome da pasta do projeto SVN
2.Clique em "SVN Commit ..."
3.A janela "commit" será exibida
4.Clique com o botão direito do mouse na pasta / arquivo que você deseja ignorar
5.Clique em Adicionar à lista de ignorados
6.Selecione a pasta / arquivo
7.Commit a "alteração de propriedade" para SVN
Além disso, como localizo arquivos que não estão sob controle de versão?
Após a Etapa 3 acima, clique em "Mostrar arquivos não versionados"
fonte
fonte