浅析.gitignore文件不起作用的原因及其解决办法
一、问题背景及.gitignore文件不起作用
当我们用 git 时常常会习惯把我们不想上传到远程代码库中的一些本地文件(夹)放在一个叫做 .gitignore 的文件中,例如常见的本地 build 文件夹,一些 IDE 如Intellig、Eclipse的项目管理文件,比如下面一些配置
// 此为注释 – 将被 Git 忽略
*.a // 忽略所有 .a 结尾的文件
!lib.a // 但 lib.a 除外
/TODO // 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
node_modules
.project
.vscode
build/ // 忽略 build/ 目录下的所有文件
doc/*.txt // 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
但有些时候我们会遇到这样的问题:放入gitignore文件夹中的文件却还是被 git index,当你通过 git status 显示文件状态时,他们并没有被忽略。
1、问题场景
当你在git库中编写某些代码文件,并已经stage该文件之后,你发现某个文件你不想用了,想在以后的改变中忽略它。然后你再你的.gitignore文件中加入该文件名,结果它并没有被忽略。
当你从远程代码库中 git clone 一份代码中本地并做些修改,build,然后通过 git add .** 等 stage了这些改变,当你通过 git status 查看状态时发现不小心把build/文件夹给add进来了。于是你在.gitignore文件中加入了build/,但发现并不起作用。
2、根本原因
.gitignore 文件只是 ignore 没有被 staged(cached) 文件,对于已经被 staged 的文件,加入 ignore 文件时一定要先从 staged 移除。下面这段话来自github:
git rm --cached file/path/to/be/ignored。
git add .
git commit -m "fixed untracked files"
二、解决办法
当文件夹是目录时,需要使用 -r 参数(递归)否则会报错
git rm -r --cached .
git add .
git commit -m "update .gitignore" // windows使用的命令时,需要使用双引号
经过上面几个命令操作后,dist 目录就会被 git 忽略了,如图灰色的代表忽略
.gitignore文件,具体的规则一搜就有。我在使用 GIT 的过程中,明明写好了规则,但问题不起作用,每次还是重复提交,无法忍受。
其实这个文件里的规则对已经追踪的文件是没有效果的,所以我们需要使用 rm 命令清除一下相关的缓存内容,这样文件将以未追踪的形式出现,然后再重新添加提交一下 .gitignore 文件里的规则就可以起作用了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2017-07-15 JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法