ignorando qualquer diretório ‘bin’ em um projeto git

Eu tenho uma estrutura de diretórios como esta:

.git/ .gitignore main/ ... tools/ ... ... 

Dentro de main e ferramentas, e qualquer outro diretório, em qualquer nível, pode haver um diretório ‘bin’, que eu quero ignorar (e eu quero ignorar tudo sob ele também). Eu tentei cada um desses padrões em .gitignore mas nenhum deles funciona:

 /**/bin/**/* /./**/bin/**/* ./**/bin/**/* **/bin/**/* */bin/**/* bin/**/* /**/bin/* #and the others with just * at the end too 

Alguém pode me ajudar? O primeiro padrão (o que eu acho que deveria estar funcionando) funciona bem se eu fizer isso:

 /main/**/bin/**/* 

Mas eu não quero ter uma input para todos os diretórios de nível superior e não quero ter que modificar o .gitignore toda vez que eu adicionar um novo.

Isso está no Windows usando o msysgit mais recente.

EDIT: mais uma coisa, existem arquivos e diretórios que têm a substring ‘bin’ em seus nomes, eu não quero que eles sejam ignorados 🙂

Antes da versão 1.8.2, ** não tinha nenhum significado especial no .gitignore . A partir de 1.8.2 git supports ** para significar zero ou mais subdiretórios (veja notas de versão ).

A maneira de ignorar todos os diretórios chamados bin em qualquer lugar abaixo do nível atual em uma tree de diretórios é com um arquivo .gitignore com o padrão:

 bin/ 

Na página man , há um exemplo de ignorar um diretório chamado foo usando um padrão análogo.

Edit: Se você já tem alguma pasta bin no seu índice git que você não deseja mais acompanhar, então você precisa removê-los explicitamente. O Git não irá parar de rastrear caminhos que já estão sendo rastreados apenas porque eles agora correspondem a um novo padrão .gitignore . Execute uma pasta remove ( rm ) apenas do índice ( –cached ) recursivelly ( -r ). Exemplo de linha de comando para a pasta bin raiz:

 git rm -r --cached bin 

O .gitignore do seu sonho parece ser:

 bin/ 

no nível superior.

Eu acho que vale a pena mencionar para git beginners:

Se você já tiver um arquivo com check-in e quiser ignorá-lo, o Git não irá ignorar o arquivo se você adicionar uma regra mais tarde . Nesses casos, você deve desmarcar o arquivo primeiro, executando o seguinte comando no seu terminal:

git rm --cached

Então, se você quiser adicionar para ignorar alguns diretórios em seu repository local (que já existem) depois de editar .gitignore você deseja executar isso no seu diretório raiz

 git rm --cached -r . git add . 

Basicamente, ele ‘atualiza’ seus arquivos repo e unstage ignorados.

Vejo:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/

O ** nunca funcionou corretamente antes, mas desde git 1.8.2 (8 de março de 2013) , parece ser explicitamente mencionado e suportado:

Os padrões nos arquivos .gitattributes e .gitattributes podem ter **/ , como um padrão que corresponde a 0 ou mais níveis de subdiretório .

Por exemplo, ” foo/**/bar ” corresponde a ” bar ” em ” foo ” em si ou em um subdiretório de ” foo “.

No seu caso, isso significa que esta linha pode agora ser suportada:

 /main/**/bin/ 
 [Bb]in/ 

corresponde a maiúsculas e minúsculas

Eu não vi isso mencionado aqui, mas isso parece ser sensível a maiúsculas e minúsculas. Depois que mudei para / Bin, os arquivos foram ignorados como esperado.

[Bb]in vai resolver o problema, mas … Aqui uma lista mais extensa de coisas que você deve ignorar (lista de exemplos por GitExtension):

 #ignore thumbnails created by windows Thumbs.db #Ignore files build by Visual Studio *.user *.aps *.pch *.vspscc *_i.c *_p.c *.ncb *.suo *.bak *.cache *.ilk *.log [Bb]in [Dd]ebug*/ *.sbr obj/ [Rr]elease*/ _ReSharper*/ 

Se você está procurando por um ótimo arquivo global .gitignore para qualquer solução Visual Studio (.NET) – eu recomendo que você use este: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

AFAIK tem o mais abrangente .gitignore para projetos .NET.

Como um aviso;

Se você acha que o .gitignore não funciona de alguma forma (então, adicione foo/* pasta nele, mas o git status ainda mostra o (s) conteúdo (s) da pasta modificado ou algo assim), então você pode usar este comando;

git checkout -- foo/*

Etapa 1: Adicione o conteúdo a seguir ao arquivo .gitignore.

 # User-specific files *.suo *.user *.userosscache *.sln.docstates # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ # Visual Studio 2015 cache/options directory .vs/ 

para 2.13.3 e em diante, escrever apenas bin no seu arquivo .gitignore deve ignorar o bin e todos os seus subdiretórios e arquivos

bin

Adicionando ** / bin / para o arquivo .gitignore fez o truque para mim (Nota: pasta bin não foi adicionada ao índice).

Literalmente nenhuma das respostas realmente funcionou para mim; o único que funcionou para mim foi (no Linux):

 **/bin (yes without the / in the end) git version 2.18.0