Git忽略目录的问题

3

我一直有一个问题,就是.gitignore没有忽略我的node_modules目录。

这是我的.gitignore文件:

*~
~*
*.log
images/
images/*
images/**/*

.idea/
.idea/*
import_errors/
output/
output/*
node_modules/
node_modules/*
uploads/
downloads/
tmp/

.DS_Store

!.keep
!*/

我也尝试运行命令来更新git索引并从索引中删除文件夹。
$ git rm --cached node_modules
fatal: pathspec 'node_modules' did not match any files
$ git update-index --assume-unchanged node_modules
fatal: Unable to mark file node_modules

通常我只需要执行这两个命令,但是我一直收到这些错误。第一个命令应该取消暂存文件,第二个命令应该更新git索引以停止跟踪文件。但由于某种原因,这些操作没有发生,我不知道还有什么问题。

1个回答

2

我仔细再次查看了gitignore文件后找到了答案。原来我的最后一条规则是:

!*/

这意味着项目根目录下的所有文件夹都应该保留。我很久以前就这样做了,但当时我还没有完全理解git的工作原理。当时的意图是将某些文件夹保留在那里,但这些文件夹是空的,里面没有任何内容。不过上面那条规则已经涵盖了这一点,所以这条规则是不必要的。
因此,删除那行代码并且运行$ git rm --cached node_modules就可以解决问题了。这条命令既会将其从缓存区中删除,又会更新索引,因此您不必运行第二个命令$ git update-index --assume-unchange

补充一下,git 无论如何都不会跟踪目录,所以你在 .gitignore 中的条目有些冗余,因为 foo/foo/* 大多是相同的(除非你在其中有以 . 开头的文件)。考虑到这一点,你的 !*/ 条目可能也撤销了之前的一些条目... - twalberg
是的,我认为这就是为什么我有那个/*尝试包含该目录下的文件和目录。但是你是对的,它不是必需的,谢谢。 - Michael Yagudaev

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