忽略文件
“并不是所有的牛奶都叫特仑苏”,在版本控制系统中也有相似的表达,那就是"并不是所有的文件都需要提交".
有的是因为没必要提交,比如日志文件,系统缓存文件等,有的是因为不能提交,比如个人隐私文件,付费文档等.
正常来说,这些文件都是不应该被提交到版本库,倘若一不留神提交到版本库,要么泄露机密信息,要是造成经济损失,要么对团队其他人工作造成不便.
有鉴于此,我们应该寻求一种机制来规避事故的发生,在 git
版本控制系统中一般有三种不同的解决方案.
最常用也是最简单的当属 .gitignore
文件,不过先不要着急,我们先了解一下忽略原则和配置规则.
忽略文件的基本原则
- 忽略操作系统自动生成的文件,保持不同操作系统的纯粹性和整洁度.
- 忽略工具软件自动生成的文件,避免因个性化配置而产生的工作障碍.
- 忽略个人隐私配置文件,除非你愿意承担公开隐私所带来的潜在风险.
目标: 只提交必要文件,忽略无用文件,尽可能考虑多种情况,不给他人制造麻烦.
忽略文件的配置规则
一行记录代表一条规则,配置规则仅针对尚未被跟踪的文件清单.
# 忽略 `*.a` 文件
*.a
# 忽略 `*.A` 文件,但 `somefile.A` 除外.
*.A
!somefile.A
# 忽略 `*.b` 和 `*.B` 文件
*.[bB]
# 忽略 `*.c` 和 `*.C` 文件,但 `somefile.C` 除外.
*.[cC]
!somefile.C
# 只忽略 `somepath/` 目录(包括该目录下所有文件),但不忽略 `somepath` 文件
somepath/
# 只忽略 `somepath/` 一级子目录下 `*.txt`,但不忽略 `somepath/sub/*.txt` 文件
somepath/*.txt
# 忽略 `somepath` 文件和 `somepath` 目录
somepath
# 只忽略 `somepath` 文件,但不忽略 `somepath/` 目录
somepath
!somepath/
# 只忽略当前目录下的 `somepath` 文件和目录,但不忽略子目录的 `somepath`
/somepath
说明:
#
开头表示注释,!
紧跟某规则之后表示增加例外情况
在线示例和帮助文档
提供两个不错的在线示例,可以参考下在什么场景应该忽略哪些文件以及如何编写忽略规则.
运行
git help ignore
命令查看帮助文档
三种设置方式
git
设置忽略文件有三种方式,如下:
- 全局配置文件(
~/.gitignore
),执行git config --global core.excludesfile ~/.gitignore
命令后适用于所有的版本库. - 远程配置文件(
$PWD/.gitignore
),编辑.gitignore
文件后适用于远程和本地版本库. - 本地配置文件(
$PWD/.git/info/exlude
),编辑$PWD/.git/info/exlude
文件后适用于本地版本库.
最常用方式
三种设置方式中,第二种最为常见,另外两种大致一样,重点在于配置文件如何编写.
创建 .gitignore
文件
参考在线示例以及基本语法编写自定义忽略规则
# General
.DS_Store
.AppleDouble
.LSOverride
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
提交 .gitignore
文件
忽略文件规则配置完毕后,需要将该文件提交到版本库,这样在其他电脑上也能应用相同的忽略规则.
# 添加 `.gitignore`
git add .gitignore
# 提交 `.gitignore`
git commit -m "add .gitignore"
# 上传 `.gitignore`
git push origin master
验证忽略效果
新建 .gitignore
文件中已忽略的文件,运行 git status
命令,如果提示 working directory clean
,那么说明忽略文件的配置已经生效,如果工作区不干净,很遗憾,忽略文件配置可能并未生效,需要检查下哪里配置错了.
运行 git check-ignore
命令检查是哪个配置规则写错了,从而我们能够更正相应的配置规则.