我正在处理一个需要跟踪其node_modules
目录的项目。我真的不想删除我对该目录的全局gitignore引用,因为所有其他项目都应该而不是跟踪node_modules
目录。
有没有一种方法可以强制git在项目级别跟踪某些内容?或者我需要遍历所有项目,验证每个项目都有自己的ignore,然后从我的全局gitignore中删除引用?
如果一个文件被跟踪,它在忽略文件中的存在将被忽略(如果我可以这样说的话:-((。
我一直说.gitignore
是一个错误的文件名,因为它实际上不是一个"要忽略的文件列表"。相反,它有两个目的。Git在两种情况下检查忽略文件条目:
- 当它要抱怨有一个未跟踪的文件时,或者
- 当它将要破坏一个文件时,它不确定这是否允许
第一种情况最常见于git status
:将文件或模式添加到忽略文件中,这会告诉git"请对*.o
等关闭,它们不应该被跟踪,所以不要抱怨它们没有被跟踪。"在这种情况下,条目可能应该在名为.git-shut-up-about-these-files
的文件中。
第二个案例更为阴险。假设您在git存储库中有一个包含文件a1
和a2
的提交,这就是您当前的提交(因为它是分支的顶端,或者因为您执行了git checkout <commit>
,或者其他什么,而这两个文件都在该提交中:为了便于论证,我们假设这是master
上的顶端提交(。我们还假设您有另一个提交1234567
,只有文件a1
,没有a2
。如果你现在这样做:
git checkout 1234567
git必须删除文件a2
。没关系,因为它在你的另一个提交(master
的提示(中,a2
在那里。如果切换回:
git checkout master
git重新创建a2
。
但是,如果在master
的提示中,有一个名为important
的文件在1234567
中不是呢?你git checkout 1234567
,然后停下来做一些重要的笔记:
$EDITOR important
您写出那些重要的注释并退出编辑器,然后决定使用git checkout master
。Git现在需要删除您刚刚写的注释,因为master
的提示包含一个名为important
的文件。
git在这种情况下要做的是检查忽略文件的名称important
。如果存在,git可以随意删除该文件,并将其替换为提交中的文件。如果不是,git checkout
会警告签出将覆盖important
,并要求您先将其排除在外。
这些文件名条目可能应该在一个名为.git-go-ahead-and-clobber-these-files-they-are-unimportant
的文件中。
请注意,没有任何条目可以标记文件"不存储在仓库中,但很珍贵:不要敲打"。
是的,您可以向本地.gitignore
添加一个否定,使git只跟踪此项目。
!node_modules