浅谈 .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.jsb.jsc.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 详解!【建议收藏】

相关推荐
枷锁—sha15 分钟前
【DVWA系列】——xss(Reflected)——Medium详细教程
前端·网络·web安全·网络安全·xss
ACMSunny17 分钟前
Chrome二级标签无法选中的解决方案
前端·chrome
菥菥爱嘻嘻17 分钟前
React---day11
前端·react.js·前端框架
一只小风华~20 分钟前
HTML前端开发:JavaScript 获取元素方法详解
前端·javascript·html
jstart千语26 分钟前
【vue3学习】vue3入门
前端·javascript·vue.js·typescript·vue
一个儒雅随和的男子27 分钟前
Vue中虚拟DOM的原理与作用
前端·javascript·vue.js
HarryHY29 分钟前
Vue 自动导入函数和变量插件 unplugin-auto-import
前端·javascript·vue.js
Monly2131 分钟前
Vue:Form正则校验
前端·javascript·vue.js
码上奶茶37 分钟前
HTML 标签
前端·html·标签·路径·超链接·双标签·单标签
全宝1 小时前
🔢前端解决浮点数运算精度丢失的问题
前端·javascript