把一个目录写进.gitignore后,其中某个文件的修改仍然出现在版本管理中,未必是路径模式失效。Git官方gitignore手册在DESCRIPTION开头就限定:忽略文件规定的是有意不跟踪的文件,已经被Git跟踪的文件不受影响。[1]

可以用一个本文自拟的例子理解:build/report.txt原先已经进入跟踪范围,后来项目为生成目录增加build/规则。规则与路径能够匹配,并不会因此自动撤销该文件既有的跟踪状态。这里需要分清“模式是否匹配”和“文件是否已经受跟踪”两个问题,而不是只不断改写模式。

手册的NOTES进一步说明,gitignore的用途是让某些未跟踪文件继续保持未跟踪。若要停止跟踪现有文件,原文将从索引移除该文件另作说明,然后才谈用忽略规则避免后续再次引入。本文只采用这一区分,不提供批量移除索引、改写历史或删除文件的命令。

忽略规则的存放位置也有用途差别。官方把需要随项目克隆、供其他仓库使用的模式,放在项目的.gitignore中讨论;只属于本仓库且不需共享的模式,可由仓库的排除文件表达;个人希望普遍使用的模式,则另有core.excludesFile配置来源。把规则写在其中一处,不能仅凭这个动作就声称它已经分发给所有协作者。

因此,交接一条“应忽略”的记录时,可以写清文件当前是否跟踪、规则来自哪一处,以及希望规则由谁共享。这是本文依据手册作出的整理建议。若只有一张.gitignore截图,接手者仍可能缺少文件当前状态或其他规则来源的信息。

本文于2026年10月10日读取官方页面;所读页面标示gitignore最近更新对应2.55.0,并列有后续无变化记录,不能由此判断读者实际安装的Git版本。本文没有修改任何仓库或运行清理命令。忽略规则处理未跟踪文件的选择,而既有索引记录需要另一项明确操作;读准两者的作用范围,才能解释为什么已经写好的规则没有让已跟踪文件自动退出。

信息来源

本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。