Comecei a usar o SVN e tenho um diretório de cache que não preciso sob controle de origem. Como posso ignorar todo o diretório / pasta com o SVN?
Comecei a usar o SVN e tenho um diretório de cache que não preciso sob controle de origem. Como posso ignorar todo o diretório / pasta com o SVN?
Respostas:
Defina a svn:ignore
propriedade do diretório pai:
svn propset svn:ignore dirname .
Se você tiver várias coisas para ignorar, separe por novas linhas no valor da propriedade. Nesse caso, é mais fácil editar o valor da propriedade usando um editor externo:
svn propedit svn:ignore .
svn rm --keep-local dirname
primeiro. (Minha saída svn status era enorme e eu bati minha cabeça no presente por um tempo.)
svn propset svn:ignore -F file.txt .
svn:ignore
e não svn::ignore
como eu. Você pode definir propriedades arbitrárias, para que a última seja OK, e você pode ver e editar a propriedade, mas isso não fará com que o SVN ignore os arquivos listados.
Aqui está um exemplo de estrutura de diretório:
\project
\source
\cache
\other
Quando project
você vê que seu diretório de cache não é adicionado e aparece como tal.
> svn st
M source
? cache
Para definir a propriedade ignorar, faça
svn propset svn: ignora o cache.
onde svn:ignore
é o nome da propriedade que você está configurando, cache
o valor da propriedade e .
o diretório em que você está configurando esta propriedade. Deve ser o diretório pai do cache
diretório que precisa da propriedade.
Para verificar quais propriedades estão definidas:
> svn proplist
Properties on '.':
svn:ignore
Para ver o valor de svn:ignore
:
> svn propget svn:ignore
cache
Para excluir propriedades definidas anteriormente:
svn propdel svn:ignore
dirname
. Por exemplo, ao digitar svn propset svn:ignore dirname
, se você permitir que o shell (bash) preencha o nome do diretório para você, ele adicionará a barra final, deixando o comando svn propset svn:ignore dirname/
, o que não faz com que a pasta seja ignorada. Pelo menos, essa foi a minha experiência.
Importante mencionar:
Na linha de comando, você não pode usar
svn add *
Isso também adicionará os arquivos ignorados, porque a linha de comando se expande *
e, portanto, svn add
acredita que você deseja que todos os arquivos sejam adicionados. Portanto, use isso:
svn add --force .
svn add --force *
NÃO FUNCIONA . Use o ponto, não a estrela.
Como passei um tempo tentando fazer isso funcionar, observe que, se os arquivos já existirem no SVN, você precisará svn delete
deles e, em seguida, edite a svn:ignore
propriedade.
Sei que parece óbvio, mas eles continuavam aparecendo como ?
na minha svn status
lista, quando pensei que os ignoraria localmente.
Para expandir um pouco, se você estiver fazendo isso com a ferramenta de linha de comando svn, digite:
svn propedit svn:ignore path/to/dir
que abrirá o editor de texto de sua escolha e digite '*' para ignorar tudo o que estiver dentro dele e salvar + sair - isso incluirá o próprio diretório no svn, mas ignore todos os arquivos dentro dele, para ignorar o diretório, use o caminho do pai e digite o nome do diretório no arquivo Após salvar, execute uma atualização ('svn up') e verifique o caminho apropriado.
Defina a svn:ignore
propriedade no diretório pai:
$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
Isso substituirá qualquer valor atual de svn:ignore
. Você pode editar o valor com:
$ svn pe svn:ignore .
O que abrirá seu editor. Você pode adicionar vários padrões, um por linha.
Você pode visualizar o valor atual com:
$ svn pg svn:ignore .
Se você estiver usando uma GUI, deve haver uma opção de menu para fazer isso.
svn ps svn:ignore . 'cachedir'
resulta em cachedir is not under version control
. mudando para svn ps svn:ignore 'cachedir' .
funcionou para mim
Obrigado por todas as contribuições acima. Gostaria apenas de compartilhar algumas informações adicionais de minhas experiências, ignorando arquivos.
Quando as pastas já estão sob controle de revisão
Após svn import e svn co os arquivos, o que geralmente fazemos pela primeira vez.
Todo o cache de tempo de execução, as pastas de anexos estarão sob controle de versão. então, antes de svn ps svn: ignore , precisamos excluí-lo do repositório.
Com o SVN versão 1.5 acima, podemos usar svn del --keep-local your_folder
, mas para uma versão anterior, minha solução é:
.svn
pasta oculta)Quando precisamos que mais de uma pasta seja ignorada
svn:ignore
svn pe
precisará editar o arquivo de texto e você pode usar este comando, se necessário, para configurar seu editor de texto usando o vi :
export SVN_EDITOR=vi
O arquivo se parece com algo assim:
runtime
cache
attachments
assets
svn propset svn:ignore -F .ignorethesefiles .
, o que usará o conteúdo do arquivo. Eu gosto de mantê-lo por perto para que você saiba o que é ignorado. As edições requerem um conjunto de acompanhamento.
Se seu diretório foo
já estiver sob controle de versão, remova-o primeiro com:
svn rm --keep-local foo
svn propset svn:ignore foo .
... e se você deseja ignorar mais de um diretório (digamos build/
temp/
e *.tmp
arquivos), pode fazê-lo em duas etapas (ignorando a primeira e editando as propriedades de ignorar (veja outras respostas aqui) ou pode-se escrever algo como
svn propset svn:ignore "build
temp
*.tmp" .
na linha de comando.
Se você estiver usando o cliente SVN específico TortoiseSVN , ao confirmar, você tem a opção de clicar com o botão direito do mouse nos itens e selecionar "Adicionar à lista de ignorados".
O comando para ignorar várias entradas é um pouco complicado e requer barras invertidas.
svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
Este comando irá ignorar qualquer coisa nomeada cache
, tmp
, null
, e and_so_on
no diretório atual.
svn propset svn:ignore -F .ignorethesefiles .
permitirá que você use um arquivo. E como mencionado, você sempre tem propedit.
Eu tive problemas para ignorar diretórios aninhados; o diretório principal que eu queria ignorar não seria exibido com 'svn status', mas todos os subdiretórios. Provavelmente isso é evidente para todos os outros, mas pensei em compartilhar:
EXEMPLO:
/tronco
/ trunk / cache
/ trunk / cache / subdir1
/ trunk / cache / subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
"Obrigado" svn por uma maneira tão hedionda, falsa e difícil de ignorar arquivos.
Então, eu escrevi um script svn-ignore-all :
#!/bin/sh
# svn-ignore-all
# usage:
# 1. run svn status to see what is going on at each step
# 2. add or commit all files that you DO want to have in svn
# 3. remove any random files that you don't want to svn:ignore
# 4. run this script to svn:ignore everything marked '?' in output of `svn status`
svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
Além disso, para ignorar uma lista específica de arquivos / nomes de caminho, podemos usar esta variante svn-ignore . Eu acho que o svn-ignore-all deve realmente ser como o xargs svn-ignore.
#!/bin/sh
# svn-ignore
# usage:
# svn-ignore file/to/ignore ...
for f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
Mais uma coisa: costumo poluir meus check-ins svn com muitos arquivos aleatórios. Quando é hora de confirmar, movo esses arquivos para um subdiretório 'antigo' e digo ao svn para ignorar 'antigo'.
Bash oneliner para várias ignorações:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
Se o diretório do seu projeto for nomeado / Project, e o diretório do cache for nomeado / Project / Cache, será necessário definir uma propriedade do subversion em / Project. O nome da propriedade deve ser "svn: ignore" e o valor da propriedade deve ser "Cache".
Consulte esta página no manual do Subversion para obter mais informações sobre propriedades.
PARA MANTER DIRETÓRIOS QUE A SVN IGNORARÁ:
svn delete --keep-local path / directory_to_keep / *
svn propset svn: ignora "*" path / directory_to_keep
Se você estiver usando um front-end para SVN como o TortoiseSVN ou algum tipo de integração IDE, também deverá haver uma opção de ignorar no mesmo menu da operação de confirmação / adição.
Defina a propriedade svn: ignore . A maioria das ferramentas svn da interface do usuário tem uma maneira de fazer isso, bem como a discussão da linha de comando no link.
Assista suas barras à direita também. Descobri que a inclusão images/*
no meu arquivo de configuração de ignorar não ignorou ./images/
. Quando corri svn status -u
, ainda mostrava ? images
. Então, mudei a configuração de ignorar para apenas images
, sem barras. Executou uma verificação de status e a limpou.
Resolvido com o Eclipse da seguinte maneira:
Primeiro, faça uma sincronização da sua pasta no projeto:
equipe -> sincronizar
Na próxima exibição, exibição de equipe, é possível ver todos os recursos que você pode confirmar no servidor SVN.
Portanto, selecione a pasta do recurso que você deseja ignorar e, em seguida, você pode ignorá-lo usando
equipe -> adicionar a
svn:ignore
.
Depois disso, na janela de confirmação, selecione a primeira opção: "ignorar por nome".
Por exemplo, se eu quiser ignorar a pasta de destino e seus recursos .class, sincronizarei e, na exibição de sincronização, selecionarei a pasta de destino. Depois disso, selecionarei
team-> add
para svn:ignore
e depois confirmarei a primeira opção na janela de confirmação.
Depois de perder muito tempo procurando como realizar essa atividade simples, decidi postar que não era difícil encontrar uma explicação decente.
Primeiro deixe a estrutura da amostra
$ svn st? projeto / tronco / alvo? projeto / tronco / myfile.x
1 - primeiro configure o editor, no mycase vim exporte SVN_EDITOR = vim
2 - “svn propedit svn: ignore project / trunk /” abrirá um novo arquivo e você pode adicionar seus arquivos e subdiretórios em nosso caso, digite “target” salvar e fechar arquivos e obras
$ svn st? projeto / tronco / myfile.x
obrigado.