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

相关推荐
Bigger1 分钟前
🎨 用一次就爱上的图标定制体验:CustomIcons 实战
前端·react.js·icon
谢尔登10 分钟前
原来Webpack在大厂中这样进行性能优化!
前端·webpack·性能优化
或非与2 小时前
windows版本git代码自动更新
git
cypking2 小时前
Vue 3 + Vite + Router + Pinia + Element Plus + Monorepo + qiankun 构建企业级中后台前端框架
前端·javascript·vue.js
这是个栗子2 小时前
git报错:‘git‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
git
小生不才yz2 小时前
(二)日常工作流 - git rm 命令的使用
git
inferno2 小时前
TortoiseGit下载与安装
git
取名真是2 小时前
Git 到底是干啥的?零基础小白听完都懂了并且轻松驾驭它
git
雨雨雨雨雨别下啦2 小时前
【从0开始学前端】vue3简介、核心代码、生命周期
前端·vue.js·vue
simon_93493 小时前
受够了压缩和收费?我作为一个码农,手撸了一款无限容量、原图直出的瀑布流相册!
前端