Git - Ignora a pasta node_modules em todos os lugares


368

Eu tenho um projeto que contém vários outros projetos:

  • Projeto principal
    • Mini projeto 1
    • Mini projeto 2

Todos contendo node_modulespasta. Eu quero que o git ignore a pasta, não importa onde esteja iniciando na pasta raiz. Algo assim para adicionar .gitignore:

*node_modules/*

Respostas:


748

Adicione isso

node_modules/

para .gitignorearquivo para ignorar todos os diretórios chamados node_modulesna pasta atual e todas as subpastas


qual seria o caminho da glob para fazer o mesmo com o karma, exclui?
SuperUberDuper

7
Para um modelo gitignore para nodejs: github.com/github/gitignore/blob/master/Node.gitignore
Xavier Egea

8
Consulte a resposta de @ AndrewSchreiber se você adicionou anteriormente a pasta node_modules ao git. Você precisará removê-lo do cache com "git rm -r --cached node_modules".
Casper

176

Use o one-liner universal no terminal no diretório do projeto:

toque em .gitignore && echo "node_modules /" >> .gitignore && git rm -r --cached node_modules; status git

Funciona não importa se você criou um .gitignoreou não, não importa se você adicionou node_modulesao git tracking ou não.

Em seguida, confirme e envie as .gitignorealterações.

Explicação

touchirá gerar o .gitignorearquivo se ele ainda não existir.

echoe >>será acrescentado node_modules/no final de .gitignore, fazendo com que a node_modulespasta e todas as subpastas sejam ignoradas.

git rm -r --cachedremove a node_modulespasta do controle git se ela foi adicionada anteriormente. Caso contrário, isso exibirá um aviso pathspec 'node_modules' did not match any files, que não tem efeitos colaterais e você pode ignorar com segurança. Os sinalizadores fazem com que a remoção seja recursiva e incluem o cache.

git statusexibe as novas alterações. Uma alteração para .gitignoreaparecerá, enquanto node_modulesnão aparecerá, pois não está mais sendo rastreada pelo git.


5
touchnão deve ser necessário aqui: >>criará o arquivo se ele não existir.
Lionello

touché preciso. >>retornará no such file or directory: .gitignorecaso contrário.
Andrew Schreiber

11
Hmm, parece diferir de SO para SO
Lionello

parece que o macOS não precisa de toque
Carles Alcolea

echo "node_modules/" > .gitignoredeve criar um novo arquivo com o conteúdo original, usando >> Anexa texto para o final do actual especificado arquivo
chrisz

28

Tente fazer algo assim

**/node_modules

** é usado para uma chamada recursiva em todo o projeto

Dois asteriscos consecutivos **em padrões correspondentes ao nome completo do caminho podem ter um significado especial:

Uma liderança **seguida por uma barra significa correspondência em todos os diretórios. Por exemplo, **/foocorresponde a um arquivo ou diretório em fooqualquer lugar, o mesmo que padrão foo. **/foo/barcorresponde arquivo ou pasta barem qualquer lugar que está diretamente sob o diretório foo.

Um final /**corresponde a tudo por dentro. Por exemplo, abc/**corresponde a todos os arquivos dentro do diretório abc, relativos ao local do arquivo .gitignore, com profundidade infinita.

Uma barra seguida por dois asteriscos consecutivos e uma barra corresponde a zero ou mais diretórios. Por exemplo, a/\**/bjogos a/b, a/x/b, a/x/y/be assim por diante.

Outros asteriscos consecutivos são considerados inválidos.

Referência


2
Essa é a resposta correta.
rei

Gostaria de explicar por que essa abordagem é melhor do que simplesmente node_modules/?
Tanckom

22

Primeiro e mais importante é adicionar .gitignorearquivo no meu aplicativo. Assim na imagem abaixo.

Coloque .gitignore na pasta / diretório pai de node_modules.

e depois adicione isso no seu .gitignorearquivo

/node_modules

Nota

Você também pode adicionar outros arquivos para ignorá-los para serem empurrados no github. Aqui estão mais alguns arquivos mantidos em .gitignore. Você pode adicioná-los de acordo com sua exigência. #é apenas uma maneira de comentar no arquivo .gitignore.

# See https://help.github.com/ignore-files/ for more about ignoring files.

# dependencies
/node_modules

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*

Por que você adicionaria build ao .gitignore?
Sebastian Nielsen

6
@SebastianNielsen A mesma razão pela qual não rastreamos node_modules. Você obtém build / compilando.
Daniel Foust

8

Crie o arquivo .gitignore na pasta raiz diretamente pelo editor de código ou pelo comando

Para Mac e Linux

 toque em .gitignore 

Para Windows

 echo .gitignore 

abra .gitignore declare o nome da pasta ou arquivo como este / foldername


4

A adição da linha abaixo no .gitignore ignorará os módulos do nó de todo o repositório.

node_modules

insira a descrição da imagem aqui


11
Quão? Ele ignorará apenas a pasta node_modules na mesma pasta em que o arquivo .gitignore está presente
Rajendran Nadar

@RajendranNadar obrigado, eu só estava tentando descobrir isso.
Jack BeNimble 6/04

0

Adicione abaixo da linha ao seu .gitignore

*/node_modules/*

Isso ignorará todos os node_modules em seu diretório atual e também no subdiretório.


Observe que já existe uma resposta aceita para esta pergunta. Por favor edite sua resposta para garantir que ele melhora a outras respostas já presentes nesta questão.
hongsy 30/01

0

você também pode fazer isso com o SVN / Tortoise git.

apenas clique com o botão direito do mouse em node_modules -> Tortoise git -> add to ignore list.

Isso irá gerar .gitIgnore para você e você não encontrará a pasta node_modules na preparação novamente.


0
**node_modules

Isso funciona para mim

abordagem recursiva para ignorar todos os node_modules presentes nas subpastas

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.