『现学现忘』Git基础 — 19、在Git中进行忽略文件操作
1、忽略文件说明
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们到本地版本库,通常都是些自动生成的文件、日志文件、系统缓存文件、编译过程中创建的临时文件,或者保存了数据库密码的配置文件、人隐私文件等等,每次执行git status命令时,都会显示Untracked files ...(未被跟踪),有强迫症的童鞋心里肯定不爽。
正常来说,这些文件都是不应该被提交到版本库,倘若一不留神提交到版本库,要么泄露机密信息,要么造成经济损失,要么对团队其他人工作造成不便。
好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,并且把.gitignore文件提交到本地版本库中。之后Git就会自动忽略这些文件,再运行git status命令时就不对其进行检测了。
即:"并不是所有的牛奶都叫特仑苏",在版本控制系统中也有相似的表达,那就是"并不是所有的文件都需要提交到本地版本库"。
2、忽略文件的原则
- 忽略操作系统自动生成的文件,保持项目在不同操作系统中的纯粹性和整洁度。
- 忽略编译生成的中间文件、可执行文件等,比如Java编译产生的
.class文件,
即:忽略工具软件自动生成的文件,避免因个性化配置而产生的工作障碍。 - 忽略自己带有敏感信息的配置文件,比如存放口令的配置文件。
目标:只提交必要文件,忽略无用文件,尽可能考虑多种情况,不给他人制造麻烦。
3、.gitignore忽略规则
文件 .gitignore 的格式规范如下:
- 所有空行或者以
#开头的行都会被 Git 忽略。 - 可以使用标准的
glob模式匹配,它会递归地应用在整个工作区中。 - 匹配模式可以以(
/)开头,防止递归。 - 匹配模式最后跟
/说明要忽略的是目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(
!)取反。
所谓的glob模式是指shell所使用的简化了的正则表达式。
- 以#开头的行用作注释。
- 星号(
*)匹配零个或多个任意字符。 [abc]匹配任何一个列在方括号中的字符 (这个例子要么匹配一个a,要么匹配一个b,要么匹配一个c);- 问号(
?)只匹配一个任意字符。 - 如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如
[0-9]表示匹配所有 0 到 9 的数字)。 - 使用两个星号(
**)表示匹配任意中间目录,比如a/**/z可以匹配a/z、a/b/z或a/b/c/z等。
我们再看一个 .gitignore 文件的例子:
# 1.忽略public下的所有目录及文件
/public/*
# 2.不忽略/public/assets,就是特例的意思,assets文件不忽略
!/public/assets
# 3.忽略具体的文件
index.html
# 4.忽略所有的java文件
*.java
# 5.忽略 a.java b.java
[ab].java
# 6.忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
# 7.忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 8.忽略任何目录下名为 build 的文件夹
build/
# 9.只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO文件
/TODO
提示:要养成一开始就为你的新仓库设置好
.gitignore文件的习惯,以免将来误提交这类无用的文件。
4、忽略文件的三种方式
有鉴于此,我们应该寻求一种机制来规避这种事故的发生,在 git 版本控制系统中一般有三种不同的解决方案。
最常用也是最简单的当属 .gitignore 文件。
(1)忽略单个仓库中的文件(远程共用)
该方式是在工作中最常用的方式,配置方法是在仓库的根目录下新建 .gitignore 文件,在文件里配置忽略规则,同时把 .gitignore 文件加入版本管理。之后可以同步该配置到远程仓库,其他开发者可更新该文件到本地仓库,与其他克隆仓库共享同一套忽略规则。
.gitignore文件对其所在的目录,及所在目录的全部子目录均有效。
1)查看当前Git工作目录中文件状态。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.java
local.txt
test.java
xyj-sha_hs.py
xyj-sun_wk.py
xyj-zhu_bj.py
nothing added to commit but untracked files present (use "git add" to track)
可以看到有6个未被追踪的文件。
2)在Git仓库的根目录下新建一个名为.gitignore的文件。
因为是点开头,没有文件名,没办法直接在Windows系统中直接创建,要通过Git Bash客户端,用Linux系统的方式新建.gitignore文件。
# 创建.gitignore文件。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ touch .gitignore
# 查看本地版本库中是否成功创建.gitignore文件。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ ll -a
total 12
drwxr-xr-x 1 L 197121 0 4月 10 11:52 ./
drwxr-xr-x 1 L 197121 0 4月 2 21:54 ../
drwxr-xr-x 1 L 197121 0 4月 10 11:51 .git/
-rw-r--r-- 1 L 197121 0 4月 10 11:52 .gitignore
-rw-r--r-- 1 L 197121 0 4月 4 10:37 hello.java
-rw-r--r-- 1 L 197121 0 4月 10 11:46 local.txt
-rw-r--r-- 1 L 197121 0 4月 4 01:20 test.java
-rw-r--r-- 1 L 197121 0 4月 4 10:38 xyj-sha_hs.py
-rw-r--r-- 1 L 197121 0 4月 4 10:38 xyj-sun_wk.py
-rw-r--r-- 1 L 197121 0 4月 4 10:38 xyj-zhu_bj.py
3)将需要忽略的文件写入.gitignore文件中。
提示:每个文件或者正则匹配占一行。
# 配置.gitignore文件内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "xyj-*.py" > .gitignore
# 查看.gitignore文件内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat .gitignore
xyj-*.py
4)将.gitignore文件提交到本地版本库。
# 1.查看当前Git工作目录中文件状态
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore # 文件名都为红色
hello.java
local.txt
test.java
nothing added to commit but untracked files present (use "git add" to track)
# 我们可以看到,xyj开头的文件已经被忽略掉了,但只是在本地起作用。
# 2.追踪.gitignore文件
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git add .gitignore
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore # 文件名为绿色
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.java # 文件名都为红色
local.txt
test.java
# 3.提交.gitignore文件到本地版本库
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git commit -m 'create ignore file'
[master d3ceba8] create ignore file
1 file changed, 1 insertion(+)
create mode 100644 .gitignore
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.java # 文件名都为红色
local.txt
test.java
这样就完成可忽略文件的整个过程了。
(2)忽略单个仓库中的文件(本地使用)
用这种方式配置忽略文件,不会同步该设置至远程仓库,只在本机起作用。
配置方法是直接编辑Git仓库根目录下的.git/info/exclude文件,把要忽略的规则直接写入,这个方法只在本机当前仓库起效,不会对其他的克隆仓库起效。
1)查看当前Git工作目录中文件状态。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.java # 文件名都为红色
local.txt
test.java
nothing added to commit but untracked files present (use "git add" to track)
可以看到有3个未被追踪的文件。
2)编辑Git仓库根目录下的.git/info/exclude文件,配置忽略。
# 1.我们先来查看一下.git/info/exclude文件的默认内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
# 2.配置忽略文件,把local.txt文件进行忽略
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "local.txt" >> .git/info/exclude
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
local.txt
3)再次查看当前Git工作目录中文件状态。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.java
test.java
nothing added to commit but untracked files present (use "git add" to track)
我们可以看到local.txt文件被忽略了。
(3)全局忽略
忽略规则由本机所有仓库共用(也就是对本机的所有Git仓库都起作用),配置方法如下:
Linux中,这时把全局要忽略的文件列表.gitignore放当前用户根目录下( ~/.gitconfig ):
git config --global core.excludesfile '~/.gitignore'
Windows中,这时把全局要忽略的文件列表.gitignore放当前用户根目录下:
git config --global core.excludesfile "%USERPROFILE%\.gitignore(可自定义)"
我们以Windows系统为例:
1)查看当前Git工作目录中文件状态。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello.java
test.java
2)创建.gitignore忽略文件。
我们可以复制用户根目录下的.gitconfig文件,并改名为.gitignore文件。
注意:
.gitconfig文件可以改成其他名称,如.gitignore_global,这样好区分工作目录中的.gitignore忽略文件。.gitconfig文件也可以使用.txt格式的文本文件代替,例如gitignore_global.txt
如下:
# 复制文件,生成gitignore_global.txt文件
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cp /c/Users/L/.gitconfig /c/Users/L/gitignore_global.txt
# 查看gitignore_global.txt文件是否生成
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ ll /c/Users/L/.git*
-rw-r--r-- 1 L 197121 90 4月 5 20:52 /c/Users/L/.gitconfig
-rw-r--r-- 1 L 197121 90 4月 5 20:59 /c/Users/L/gitignore_global.txt
# 清空gitignore_global.txt文件中的内容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ echo "" > /c/Users/L/gitignore_global.txt
3)将忽略文件配置到Git全局配置文件.gitconfig文件中。
通过如下命令进行配置。
git config --global core.excludesfile /c/Users/L/gitignore_global.txt
执行命令后,查看.gitconfig文件内容,如下:
[user]
name = sun_wk
email = sun_wk@126.com
# 下面两行是生成的
[core]
excludesfile = C:/Users/L/gitignore_global.txt
提示:如果之前配置
global级别的配置签名,.gitconfig文件就已经被创建。
至此之后,所有Git仓库都会自动应用这个gitignore_global.txt文件中,所配置忽略的文件。
当然本例子是存放于 当前用户的根目录下,你可以改成其他路径,但是不推荐。
4)把需要忽略的文件加入到gitignore_global.txt文件中。
把gitignore_global.txt文件中的内容清空,之后添加要忽略的文件。
gitignore_global.txt文件内容如下:
# 忽略所有.java文件,也可以单个文件写
*.java
5)查看learngit仓库工作目录文件状态。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean
可以看到hello.java和test.java两个未被追踪的文件被忽略掉了。
提示:其实可以直接将
gitignore_global.txt文件中的内容直接写到.gitconfig文件中,效果也一样的。只不过这样会比较混乱一点,还是推荐上面详细叙述的方法来设置Git全局忽略文件。
参考:
『现学现忘』Git基础 — 19、在Git中进行忽略文件操作的更多相关文章
- 『现学现忘』Git基础 — 19、Git中忽略文件
目录 1.忽略文件说明 2.忽略文件的原则 3..gitignore忽略规则 1.忽略文件说明 有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们到本地版本库,通常都是些自动生成的文件. ...
- git中 gitignore 忽略文件操作
通常,.gitignore文件被放置在存储库的根目录中.根目录也称为父目录和当前工作目录.根文件夹包含组成项目的所有文件和其他文件夹.也就是说,您可以将它放在存储库中的任何文件夹中.你甚至可以有多个. ...
- 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理
目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...
- 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令
目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...
- 『学了就忘』Linux基础 — 9、虚拟机中快照的使用
目录 1.快照的含义 2.快照的使用 步骤一:创建拍摄快照 步骤二:填写快照信息并创建 步骤三:查看快照 步骤四:操作快照 3.管理虚拟机小技巧 4.关于快照说明 快照和克隆是VMware中两个非常实 ...
- 『现学现忘』Git基础 — 5、Git的协作模式
目录 1.分布式工作流程 2.集中式工作流 3.分支工作流 4.GitFlow 工作流(最流行) 5.Forking 工作流(偶尔使用) 6.总结 1.分布式工作流程 与传统的集中式版本控制系统(CV ...
- 『现学现忘』Git基础 — 10、配置Git用户签名说明
目录 1.为什么要创建用户签名 2.为什么要在Git中配置这些信息 3.创建用户签名的方式 4.总结 1.为什么要创建用户签名 作为版本控制系统的客户端,每台客户机对版本库的所有提交操作,都需要注明操 ...
- 『现学现忘』Git基础 — 13、Git的基础操作
目录 1.Git最基础的使用方式 (1)初始化本地版本库 (2)查看文件的状态 (3)把文件添加到暂存区 (4)把暂存区的内容提交到本地版本库 2.总结本文用到的Git命令 1.Git最基础的使用方式 ...
- 『现学现忘』Git基础 — 18、Git对象的总结
目录 1.Git操作最基本的流程 2.工作目录中文件的状态 3.Git效率说明 提示:前面三篇文章已经分别的对blob对象.tree对象.commit对象进行了详细的说明,这篇文章我们总结一下,Git ...
随机推荐
- ThreadPoolTaskExecutor原理、详解及案例
为什么要用线程池? 服务器应用程序中经常出现的情况是:单个任务处理的时间很短而请求的数目却是巨大的. 构建服务器应用程序的一个过于简单的模型应该是:每当一个请求到达就创建一个新线程,然后在新线程中为请 ...
- can总线第三讲
一 CAN控制器官方定义:CAN控制器用于将欲收发的信息(报文),转换为符合CAN规范的CAN帧,通过CAN收发器,在CAN-bus上交换信息.举个便于理解的例子:就像您发快递一样,要根据快递公司提 ...
- .NET Best Practices: Architecture & Design Patterns (5 Days Training)
.NET Best Practices: Architecture & Design Patterns (5 Days Training) .NET最佳实践:架构及设计模式 5天培训课程 课程 ...
- canvas 实现 github404动态效果
使用canvas来完成github404的动态效果 前几天使用css样式和js致敬了一下github404的类似界面,同时最近又接触了canvas,本着瞎折腾的想法,便借着之前的js的算法,使用can ...
- python-转换函数使用
输入一个整数和进制,转换成十进制输出 输入格式: 在一行输入整数和进制 输出格式: 在一行十进制输出结果 输入样例: 在这里给出一组输入.例如: 45,8 输出样例: 在这里给出相应的输出.例如: 3 ...
- java中时间的规范是按美国,SimpleDateFormat怎么处理
题目3.2: 如果时间的规范是按美国,怎么处理? import java.text.ParseException;import java.text.SimpleDateFormat;import ja ...
- Node.js躬行记(17)——UmiJS版本升级
在2020年我刚到公司的时候,公司使用的版本还是1.0,之后为了引入微前端,迫不得已被动升级. 一.从 1.0 到 2.0 在官方文档中,有专门一页讲如何升级的,这个用户体验非常好. 一个清单列的非常 ...
- c++对c的拓展_函数的引用
注意:1.引用可作为形参较指针更为直观 2可作为返回值 (判断标准:空间是否释放) #include <iostream> #include <stdlib.h> using ...
- 自学java如何快速地达到工作的要求?
自学java如何快速地达到工作的要求,是很多初学者都比较关心的问题,对于初学者来说,盲目自学不但不能快速入门,还会浪费大量的时间. 今天知了堂就来分享自学Java如何快速达到找工作的要求. 1.自学J ...
- Blazor技术开发了一个访客管理系统
简单介绍一下系统功能 该系统为了在疫情期间能很好管理访客登记做好风险管控,同时可以整合智能设备做到自动确认并跟踪访客的行动轨迹,该项目完全开源. 系统流程 访客可以同通过手机进行预注册,同时上传照片, ...