.gitignore文件无法忽略node_modules文件夹

34
即使将.gitignore文件添加到.git仓库的根目录,我仍然无法让Git忽略node_modules目录。这些文件尚未添加到Git进行跟踪。
我查阅了早期的stackoverflow问题,也尝试在第一行添加一个注释行,因为显然Git不会读取该文件的第一行,但仍然不起作用。我还尝试了以下命令,但无济于事:
git rm --cached -r .

有人能帮我吗?这是.gitignore的内容:

#first line
node_modules/

1
你把.gitignore放在.git文件夹里还是放在包含.git文件夹的目录中? - merlin2011
在 .git 内部 - Rimil Dey
我曾经遇到过这个问题,原因是在暂时切换到一个没有.gitignore文件的分支后,从存储区还原了一些更改...取消暂存是正确的解决方法,但也让人感到尴尬。 - WBT
13个回答

23

我不知道这是否能帮助任何人,但是我用echo"" > .gitignore在PS中创建了我的.gitignore文件,因此编码设置为UTF-16LE而不是UTF-8,这会导致.gitignore无法正常工作。


2
好的,但我们该如何改变这种情况呢?这个解决方案只是简单地解释了一个潜在的问题,但仍然没有提供解决方案。这就像说,你的汽车发动机缸中的火花塞有问题,然后立即走出房间一样。 - Jack_Hu
我非常同意,所以我进行了侦查。这个答案的第二条评论就是解决方法。话虽如此,最简单的方法可能是使用GUI并通过上下文菜单重新创建文件。https://dev59.com/SG035IYBdhLWcg3wJcjT#5596984 - cBlaine

18
即使在.git仓库的根目录中添加了.gitignore文件,我仍然不能让git忽略node_modules目录。
.gitignore文件应该放置在工作树(也称为项目的根目录)的根目录上,即位于.git目录的上方。在.git目录内,该文件无效。
这很有意义,因为通常您希望将此文件放入版本控制中,以与项目上的所有开发人员共享被忽略的文件列表。只有工作树外的文件夹(.git之外),才处于版本控制下,.git目录是Git的内部存储。
(如果您想本地忽略模式,而不添加到版本控制中,可以通过在.git/info/exclude中定义模式来实现。)
[...]并且还尝试将注释行添加到第一行,因为显然Git不会读取该文件的第一行
值得记录的是,它确实也读取第一行,在.gitignore中第一行并没有什么特别之处。

5
回答像老板一样。我一直在寻找有关如何构建.gitignore和它应该放置的信息。每个人都说,"只需制作一个.gitignore",但没有人说出具体细节...而我们知道这些计算机花哨的机器是由精确性打造的...;) +1 鼓掌赞美。 - twknab
9
如果你已经开始对node_modules进行版本控制,请记得运行git rm --cached <files>命令,这将把它们从缓存中移除,并开始读取新的/更新的.gitignore文件。 - OK999

12

如果所有方法都失败了,您可以尝试这个方法。我遇到了同样的问题,但是什么都没有起作用。

删除您的node_modules文件夹。 将更改推送到GitHub(如果需要从repo中删除node_modules文件夹)。 确保在.gitignore文件中有node_modules/一行。 运行npm install。 再次推送。

我在Visual Studio Code下工作时注意到,在运行npm install之前必须先创建.gitignore文件。不确定为什么,但在我的情况下它修复了它。


这对我来说是个教训。实际上发生的是,我不小心将node_modules提交到了我的分支中(哎呀!)。我需要删除modules文件夹,更新我的忽略文件以包括modules文件夹,提交文件夹的删除以及新的gitignore,然后再次运行npm i,一切都恢复正常了。 - Arbiter

11
我通过删除文件名中的“.gitignore”,并将其变成一个不可见的点文件来解决了这个问题,就像命名文件“.gitignore”并在其中保留表达式

node_modules/

因此,现在git终于忽略了node_modules目录。不知道为什么会起作用,但至少它确实起作用了。


5
我删除了node_modules文件夹并提交了更改。然后我复制了.gitignore文件的内容并将其删除。重新创建文件,将剪贴板的内容粘贴回去,然后运行npm i。问题已解决。我猜测如果您在虚拟机或远程桌面上工作,并且正在使用Windows,则将存储库移到Mac上可能会导致像上面提到的编码错误。
简而言之:
复制.gitignore内容
删除.gitignore 重新创建.gitignore 粘贴剪贴板内容
完成

3
在我的情况下,问题通过将文件编码从“Unicode”转换为“UTF-8 Without BOM”解决了,因为我通过Powershell重定向输出创建了“.gitignore”文件。最初我将行尾从Windows(CRLF)更改为Linux(LF),但没有帮助。

2
在我的情况下,我是这样用引号写的:"Original Answer"。
'functions/node_modules/'

替代

functions/node_modules/

1
我的项目结构如下所示:

project_name
 |
 |__ client
 |      |_ node_modules/
 |
 |__ server

$ sudo nano .gitignore 

Changed # dependencies 
        /node_modules to client/node_modules

$ git add .     /* to add modified gitignore file */
$ git status    /* to observe changes */

0

确保文件末尾始终有一个新行。如果您在node_modules/声明后忘记添加新行,这可能会对您有所帮助。


0
在我的情况下,我创建了两个“.gitignore”文件,一个在主目录中,另一个在客户端文件夹中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接