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.
Não é necessária a melhor solução. Potencialmente, as pessoas precisam procurar em diferentes arquivos .gitignore para descobrir por que o arquivo está sendo ignorado. Alguns preferem ter todas essas informações em um arquivo .gitignore armazenado no diretório raiz do repo.
haren 24/03
1
@haren não é a única solução - a resposta de Joey também é certamente válida. Escolha o que for melhor para você. Eu diria que ignorar regras locais para um diretório deve estar nesse diretório e que regras globais devem ser globais. (Além disso, essa resposta é antiga e acho que ** não era suportada na época).
Ptyx
209
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/**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.
Joeyhoer 26/05
4
Todos os arquivos com o final .meta devem ser ignorados pelo git. Como é que isso funciona? **.js?
Preto
"Outros asteriscos consecutivos são considerados inválidos." resume tudo
imrok
68
ATUALIZAÇÃO: Dê uma olhada na resposta de @ Joey : o Git agora suporta a **sintaxe nos padrões. Ambas as abordagens devem funcionar bem.
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 /também não funcionará, combinando caminhos como public/static/foo.jse foo/public/static/bar.js. 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).
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.
Isso não é totalmente verdade - especificamente a parte "Remover os principais /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 /.
joeyhoer
@ JoeyHoer obrigado pela dica, atualizei minha resposta de acordo.
Adam afiada
9
Para ignorar arquivos não rastreados, basta acessar .git / info / exclude. Excluir é um arquivo com uma lista de extensões ou arquivos ignorados.
Isso não seria transferido para outros clones do repositório como o .gitignore (após ser confirmado, é claro).
Jpmc26
3
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:
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.
fonte
Parece que a
**
sintaxe é suportada agit
partir da versão de1.8.2.1
acordo com a documentação .fonte
xxx/**
exxx/
?xxx/**
direciona todos os arquivos e diretórios dentro dexxx
enquantoxxx/
direciona oxxx
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, usarxxx/*
ouxxx/**
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:
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
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
.) Aremoção da liderançaEDIT: 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 comopublic/static/foo.js
efoo/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: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.fonte
/
também não funcionará, correspondendo a caminhos comopublic/static/foo.js
efoo/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.
fonte
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:Descobri que cortar
./
o início é geralmente necessário para o git entender quais arquivos evitar. Portanto, ocut -c 3-
.fonte