Existe uma maneira de ignorar todos os arquivos de um tipo em um diretório?
** aparentemente não faz sentido git, então isso não funciona:
/public/static/**/*.js
A idéia é combinar pastas aninhadas arbitrárias.
Existe uma maneira de ignorar todos os arquivos de um tipo em um diretório?
** aparentemente não faz sentido git, então isso não funciona:
/public/static/**/*.js
A idéia é combinar pastas aninhadas arbitrárias.
Respostas:
Nunca tentei, mas git help ignoresugere que se você colocar um .gitignorecom *.jsno /public/static, ele vai fazer o que quiser.
Nota: verifique também a resposta de Joeys abaixo: se você deseja ignorar arquivos em um subdiretório específico, um .gitignore local é a solução certa (a localidade é boa). No entanto, se você precisar do mesmo padrão para aplicar a todo o repo, a solução ** será melhor.
Parece que a **sintaxe é suportada a gitpartir da versão de 1.8.2.1acordo com a documentação .
Dois asteriscos consecutivos ("
**") nos padrões correspondentes ao nome do caminho completo podem ter um significado especial:
Um líder "
**" seguido por uma barra meio corresponder em todos os diretórios. Por exemplo, "**/foo" corresponde a um arquivo ou diretório "foo" em qualquer lugar, igual ao padrão "foo". "**/foo/bar" corresponde ao arquivo ou diretório "bar" em qualquer lugar que esteja diretamente no diretório "foo".Um "
/**" final corresponde a tudo dentro. Por exemplo, "abc/**" corresponde a todos os arquivos dentro do diretório "abc", em relação à localização do.gitignorearquivo, com profundidade infinita.Uma barra seguida por dois asteriscos consecutivos e uma barra corresponde a zero ou mais diretórios. Por exemplo, "
a/**/b" corresponde "a/b", "a/x/b", "a/x/y/b" e assim por diante.Outros asteriscos consecutivos são considerados inválidos.
xxx/**e xxx/?
xxx/**direciona todos os arquivos e diretórios dentro de xxxenquanto xxx/direciona o xxxdiretório diretamente. Isso realmente importa apenas ao negar padrões com !como "Não é possível incluir novamente um arquivo se um diretório pai desse arquivo for excluído.", Portanto, usar xxx/*ou xxx/**seria necessário nesse caso.
**.js?
ATUALIZAÇÃO: Dê uma olhada na resposta de @ Joey : o Git agora suporta a **sintaxe nos padrões. Ambas as abordagens devem funcionar bem.
A página do manual gitignore (5) declara:
Os padrões são lidos em um arquivo .gitignore no mesmo diretório que o caminho ou em qualquer diretório pai, com os padrões nos arquivos de nível superior (até o nível superior da árvore de trabalho) sendo substituídos pelos que estão nos arquivos de nível inferior até o diretório contendo o arquivo
O que isso significa é que os padrões em um .gitignorearquivo em um determinado diretório do seu repositório afetarão esse diretório e todos os subdiretórios .
O padrão que você forneceu
/public/static/**/*.js
não está certo, primeiro porque (como você notou corretamente) a **sintaxe não é usada pelo Git. Além disso, as principais /âncoras desse padrão para o início do nome do caminho. (Portanto, /public/static/*.jscorresponderá, /public/static/foo.jsmas não /public/static/foo/bar.js .) A remoção da liderança EDIT: Apenas remover a barra principal também não funcionará - porque o padrão ainda contém uma barra, ele é tratado pelo Git como uma bola de casca simples e não recursiva (obrigado @Joey Hoer por apontar isso)./também não funcionará, combinando caminhos como public/static/foo.jse foo/public/static/bar.js.
Como o @ptyx sugeriu, o que você precisa fazer é criar o arquivo <repo>/public/static/.gitignoree incluir apenas este padrão:
*.js
Não há guia /, portanto ele corresponderá em qualquer parte do caminho, e esse padrão será aplicado apenas aos arquivos no /public/staticdiretório e seus subdiretórios.
/também não funcionará, correspondendo a caminhos como public/static/foo.jse foo/public/static/bar.js". é falso. Para citar a documentação "Se o padrão não contém uma barra /, o Git o trata como um padrão de globos de shell e verifica se há uma correspondência com o nome do caminho em relação à localização do arquivo .gitignore (em relação ao nível superior da árvore de trabalho se não de um arquivo .gitignore) ". foo/public/static/bar.jsnão seria correspondido porque o padrão contém a /.
Para ignorar arquivos não rastreados, basta acessar .git / info / exclude. Excluir é um arquivo com uma lista de extensões ou arquivos ignorados.
Eu acredito que a solução mais simples seria usar find. Não gosto de ter vários .gitignoretópicos em subdiretórios e prefiro gerenciar um nível superior exclusivo .gitignore. Para fazer isso, você pode simplesmente anexar os arquivos encontrados ao seu .gitignore. Supondo que esse /public/static/seja o seu projeto / git home, eu usaria algo como:
find . -type f -name *.js | cut -c 3- >> .gitignore
Descobri que cortar ./o início é geralmente necessário para o git entender quais arquivos evitar. Portanto, o cut -c 3-.