浅谈 .gitignore

前言

在使用 git 的时候,经常会碰到某些文件不需要提交到远程,最常见的就是项目中的 node_modules 或者打包出来的压缩包 dist ,这些一般在使用一些框架的时候就会自动帮我们初始化,但是难免会有些情况需要我们自己去添加部分需要忽略的文件。

基础使用

在 git 的文件系统中,文件被分为三类,分别是 Tracked (追踪文件), Untracked (未追踪文件), Ignored(忽略文件)。

忽略文件是必须要由我们来告诉 git 哪些文件需要被忽略

而 .gitignore 文件就是我们告诉 git 要忽略哪些的文件的桥梁

你可以用下面的规则在 .gitignore 文件中描述你想要忽略什么文件

注释

使用 # 开头来进行注释,可以为你的忽略文件进行一些解释

比方说

bash 复制代码
# this is .gitignore file.

通过目录忽略

可以在里面写下某个目录的名称,比如说

bash 复制代码
folderName

或者

bash 复制代码
folderName/

这两种写法是一样的,这样 git 就会忽略 folderName 底下的所有文件

这种写法会指定项目中所有的 folderName 你可以通过下面的写法来指定你想要忽略的哪个目录

bash 复制代码
# 根目录下的 folderName
/folderName
# 第二层 folderName 无论第一层文件夹是什么名字
*/folderName

通过文件忽略

还可以通过某个文件的文件名进行忽略,比方说

bash 复制代码
fileName.js

这样就可以忽略 fileName.js 这个文件,不论它在哪个目录下

跟上面一样,你也可以通过在前面添加 / 或者 * 来匹配不同层级的文件

bash 复制代码
# 根目录下的 fileName.js
/fileName.js
# 第二层 fileName.js 无论第一层文件夹是什么名字
*/fileName.js

使用通配符

例如上面的 * 就是通配符的一种,当然还提供了其他的通配符来方便我们进行匹配

常用的通配符有:

  1. 星号* :匹配任意字符;

除了上面的用法,放在目录的某一层级,代表全部,还可以用于拼接部分文件名称,用于匹配多个文件,比如说

bash 复制代码
*.png

用于匹配所有以 png 为结尾的文件

bash 复制代码
folder/*/flieName.js

用于跳过 folder 下的第一层目录,直接去第二层查找 flieName.js

  1. 问号 ?:匹配除 '/'外的任意一个字符;

用法和 * 相同,只不过 ? 只能匹配到一个字符

  1. 方括号 [xxxx]:包含单个字符的匹配列表;

用数组的方式匹配多个的单个字符

比方说用 [a,b,c].js 同时可以匹配三个文件 a.js、b.js、c.js

[a,b,c].js 与 ['a', 'b', 'c'].js 是等价的,但是要注意单个字符,也就是说 ['aa'] 是无效的。

  1. 感叹号 !:表示不忽略(跟踪)匹配到的文件或目录;

比如说你忽略了 A 这整个文件夹,但是你不想忽略底下的 B.js 文件,你就可以这样写

bash 复制代码
A/*
!A/B.js

如何查看自己已忽略的文件

可能你写了一个很复杂的匹配规则,你并不确定它到底忽略了什么,是否是你想要的,这时候,你可以使用 git ls-files --ignore --exclude-standard -o 来查看当前的目录下有哪些被忽略的文件(你的忽略规则匹配到了哪些文件)

bash 复制代码
git ls-files --ignore --exclude-standard -o

git添加.gitignore后不生效问题

问题现象

可能有一部分文件,你已经正在开发并且提交过 git 了,但是后面发现这部分文件不需要保存到 git 里面去,这时候你在 .gitignore 中添加上这些文件就会发现 .gitignore 失效了。

问题原因

因为我们误解了 .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是未追踪文件。

之所以你的规则不生效,是因为那一部分文件已经被 Git 记录过,因此 .gitignore 对它们完全无效。

解决方法

  1. 在 git 中删除对这些文件的追踪
  2. 将这一操作推送
bash 复制代码
git rm -r --cached 'yourFileRoute'
git add .
git commit 

yourFileRoute 可以输入一个具体文件的路径,也可以是某个文件夹的路径(这样将会移除这个文件夹下所有文件的追踪)

在你执行了这一操作并且这个路径是合法的以后,你就能够在控制台看到匹配到了多少个文件。

然后选哟将这一操作推送到远程,这之后这个文件就会被合理的忽略了。

总结

本文简单的介绍了一下 .gitignore 文件,以及总结了一些有用的命令或者是问题,希望在看完这一篇文章以后能够对 .gitignore 文件有一个初步的了解,并且让你来配置这个文件也能够做到信手拈来

参考

【问题分析解决】git添加.gitignore后不生效问题

Git 开发必备 .gitignore 详解!【建议收藏】

相关推荐
康小汪3 小时前
AI 写 Vue 总写成同一个味道:给它装 Skills,装的不是知识是边界
前端·vue.js·人工智能·ai编程·最佳实践
智能运维指南4 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
白山编程大哥5 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Flynt6 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
Csvn7 小时前
bundle优化
前端
北冥有鱼7 小时前
发版后动态路由点击报 `Failed to fetch dynamically imported module`」问题上的完整排查与修复过程
前端·vue.js
静默回滚7 小时前
视频压到 25 MB 以内,码率要算、音轨要扣、余量要留
前端
用户37203749260187 小时前
把 10MB 中文语义模型塞进浏览器:STSB 做到教师模型的 93%,但线上 top1 只有 42%
前端
光锥智能8 小时前
海康机器人举行2026移动机器人新品发布会:箱式存拣升级,「明智」系列发布
java·前端·机器人
计算机魔术师8 小时前
Anthropic 上市文件最吓人的一幕,不是亏损 807 亿
前端