前言
最近在开发项目时,有这样一个需求。之前使用 .gitignore
时忽略了整个文件夹的版本控制,如下图所示:忽略了 unpackage/
整个文件夹及其下属内容。而现在忽然需要对其中的 dist
、res
目录放开忽略,其它的文件夹还是需要继续忽略,要怎么实现呢?
经过了解一番,才得知:在.gitignore
文件中,可以使用通配符解决以上这个问题,可以设置一下排除规则与过滤策略。
通配符!
表示:否定模式,表示指定不忽略某些文件或文件夹。
先说解决方案,后面我们进行详细说明几种通配符的作用,因此,以上的需求可以使用如下忽略代码进行优化:
# 匹配根目录下的 unpackage 文件夹
/unpackage/
# 取消对 unpackage 下的 dist 文件夹的忽略
!/unpackage/dist/
# 取消对 unpackage 下的 dist 文件夹的忽略
!/unpackage/res/
一. 通配符
在 .gitignore
文件中,通配符用于匹配文件和文件夹的名称,以控制 Git 忽略哪些文件或文件夹。下面是一些常用的通配符的使用示例:
*
:匹配零个或多个字符。- 例如,
*.txt
会匹配所有以.txt
结尾的文件。
- 例如,
?
:匹配一个字符。- 例如,
test?.txt
会匹配test1.txt
和test2.txt
,但不会匹配test12.txt
。
- 例如,
**
:匹配零个或多个目录。- 例如,
logs/**/*.log
会匹配logs/a/b/c.log
、logs/x/y/z.log
等。
- 例如,
/
:指定路径。- 例如,
/logs/
会匹配根目录下的logs
文件夹,但不会匹配src/logs
。
- 例如,
!
:否定模式,表示不忽略某些文件或文件夹。- 例如,
!debug/
会取消对debug
文件夹的忽略。
- 例如,
使用通配符的一些示例:
忽略所有的
.txt
文件:*.txt
忽略某个特定文件夹下的所有文件:
path/to/folder/
忽略所有以
.log
结尾的文件,但不包括important.log
:*.log !important.log
忽略某个文件夹及其子文件夹下的所有
node_modules
文件夹:node_modules/
需要注意的是,.gitignore
文件可以放在项目的根目录下,也可以放在特定的子目录下,它会对该目录及其子目录生效。
讲到这里,我们顺便重温一下 .gitignore
的各种常用的操作吧!巩固加深一下对它的理解。
二. .gitignore
中常用的忽略规则
.gitignore
是一个用于配置 Git 版本控制系统忽略指定文件或目录的规则文件。它可以用来排除不需要提交到代码仓库中的临时文件、编译产物、个人敏感信息等。下面对 .gitignore
中常见的操作进行详解:
1. 注释:
以井号(#)开头的行表示注释,被 Git 忽略。
# file.txt
2. 空行:
空行会被 Git 忽略。
3. 目录的忽略:
要忽略整个目录,只需要在.gitignore 文件中添加目录名称即可,例如:
dir/
这将忽略目录dir/
下的所有文件和子目录。
4. 特定文件的忽略:
要忽略特定文件,只需要在.gitignore 文件中添加文件名称,例如:
file.txt
这将忽略根目录下的file.txt
文件。
5. 通配符的使用:
可以使用通配符来匹配多个文件或目录。常用的通配符有:
*
:匹配任意长度的字符串,但不匹配目录分隔符(斜杠/
)。**
:匹配任意长度的字符串,包括目录分隔符。?
:匹配任意一个字符。[]
:匹配一组字符。!
:用于对规则进行否定。
例如:
*.txt // 忽略所有以.txt结尾的文件
build/ // 忽略根目录下的build目录
tmp/*.log // 忽略tmp目录下所有.log文件
test/**/*.tmp // 忽略test目录及其子目录下的所有.tmp文件
!src/foo.txt // 不忽略根目录下的src目录下的foo.txt文件
更多通配符的使用请参考上面第一章内容
6. 文件类型模板:
Git 提供了一些常见文件类型的模板,可以直接使用,例如:
*.html // 忽略所有HTML文件
*.o // 忽略所有目标文件
可以在.gitignore 文件中使用这些模板,避免重复配置。
7. 模式的优先级:
.gitignore
文件中的模式按照从上到下的顺序逐条匹配,如果遇到匹配的模式,则后面的模式不再生效。如果要取消对某个文件的忽略,可以使用!
前缀特别指定。
特别注意: 已经被 Git 跟踪的文件不会受到
.gitignore
的影响。要忽略已经被提交的文件,可以使用git rm --cached <file>
命令将其从版本控中移除。
结语
综上所述,.gitignore
文件是配置 Git 忽略特定文件和目录的规则文件。通过使用注释、行、目录忽略、特定文件忽略、通配符和文件类型模板等操作,可以灵活地配置和管理需要忽略的文件。
正确的使用通配符的使用可以优雅且灵活的实现各种文件及文件夹的忽略策略!
同时,正确定义 .gitignore
文件可以有效地减少代码仓库的不必要的提交,提高版本控制的效率。