git项目可以跟踪我的全局gitignore中列出的目录吗



我正在处理一个需要跟踪其node_modules目录的项目。我真的不想删除我对该目录的全局gitignore引用,因为所有其他项目都应该而不是跟踪node_modules目录。

有没有一种方法可以强制git在项目级别跟踪某些内容?或者我需要遍历所有项目,验证每个项目都有自己的ignore,然后从我的全局gitignore中删除引用?

如果一个文件被跟踪,它在忽略文件中的存在将被忽略(如果我可以这样说的话:-((。

我一直说.gitignore是一个错误的文件名,因为它实际上不是一个"要忽略的文件列表"。相反,它有两个目的。Git在两种情况下检查忽略文件条目:

  • 当它要抱怨有一个未跟踪的文件时,或者
  • 当它将要破坏一个文件时,它不确定这是否允许

第一种情况最常见于git status:将文件或模式添加到忽略文件中,这会告诉git"请对*.o等关闭,它们不应该被跟踪,所以不要抱怨它们没有被跟踪。"在这种情况下,条目可能应该在名为.git-shut-up-about-these-files的文件中。

第二个案例更为阴险。假设您在git存储库中有一个包含文件a1a2的提交,这就是您当前的提交(因为它是分支的顶端,或者因为您执行了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

最新更新