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 ignore
sugere que se você colocar um .gitignore
com *.js
no /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 git
partir da versão de 1.8.2.1
acordo 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.gitignore
arquivo, 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 xxx
enquanto xxx/
direciona o xxx
diretó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 .gitignore
arquivo 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/*.js
corresponderá, /public/static/foo.js
mas 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.js
e foo/public/static/bar.js
.
Como o @ptyx sugeriu, o que você precisa fazer é criar o arquivo <repo>/public/static/.gitignore
e 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/static
diretório e seus subdiretórios.
/
também não funcionará, correspondendo a caminhos como public/static/foo.js
e 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.js
nã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 .gitignore
tó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-
.