前言
这个gitignore的规则我看过很多次和正则表达式非常像,但是看一次忘记一次,因为平时都是idea自动生成,使用频率也非常低,一般默认设置就好了,但是用一次忘一次,每次都需要重新去看笔记。今天把笔记整理一下然后再写一遍,当加强记忆和分享。
介绍
.gitignore是git提供来增强文件追踪管理的配置文件,里面列出要忽略的文件模式,Git会根据这些模式规则来判断是否将文件添加到版本控制中,一般来说被添加的都是一些日志文件,临时文件,编译文件等。
注意ignore是一个隐藏文件,win下可能需要打开隐藏文件设置,mac下可以通过终端ls -a查看到(idea中是默认显示隐藏文件的)。
一般idea在git init后会自动生成,如果需要自己手动创建mac下建议使用touch .gitignore
, win下直接命名.gitignore.
(前后两个点,会自动变成.隐藏文件)
通用规范
- gitignore里面的注释是#,可以如下编写告诉自己和别人你现在忽略git管理的文件是什么类型或者为什么
- 写到gitignore里面的都是需要被忽略,不被管理的(下面特例)
- 特例-如果
!
开头则表示这个是一定需要被管理,不受其他规则约束 /
表示从这个项目的根目录- 没有
/
开头表示这个文件或者目录会计,不管在哪里只要在项目里面任何地方出现都不被管理 /
结尾表示当前忽略的是一个文件夹(没有/结尾默认就是文件)
匹配规则
- 以斜杠
/
开头表示目录 - 以星号
*
通配多个字符 - 以问号
?
通配单个字符 - 以方括号
[]
包含单个字符的匹配列表 -
以叹号
!
表示不忽略(跟踪)匹配到的文件或目录 - 以两个星号
**
开头通配多级路径,如果一个星号则只能通配一级(这个规则进行开头,如果是结尾一个星号也能通配)
小练习
上面都是规则,下面来几个实战就秒懂了
-
# 表示项目里面只要含有.idea里面的文件夹全部不进行git管理 .idea/
-
# 项目里面只有含有 .DS 三个字符的文件都过滤,不进行管理 .Ds*
-
# 根目录下的target文件夹不进行过滤 /target/
-
# 根目录下一级的target文件夹不进行过滤(注意*/这种形式就是根目录的下一级) */target/
-
# 所有地方temp文件夹下的txt后缀的文件都不进行过滤 tmp/*.txt
-
# .mvn/wrapper/文件夹下的maven-wrapper.jar被git管理 !.mvn/wrapper/maven-wrapper.jar
可以看到,其实很多规则是都是重复的,如果添加管理和忽略管理冲突,添加管理的优先级更高,比如
# 表示.mvn下都不管理,但是.mvn/wrapper/文件夹下的maven-wrapper.jar被git管理
.mvn/
!.mvn/wrapper/maven-wrapper.jar
然后还有很多等价写法,比如**/.idea/*
和.idea/
其实是等价的,可以怎么优雅怎么来,怎么简单怎么写
生效机制
修改.gitignore后并不会对以前被git追踪管理的文件生效,所以一定要在创建项目的时候就生成.gitignore文件,进行版本管理,但是如果修改.gitignore以后想要让原来的文件生效,需要把原来的文件都移除版本控制,然后重新添加。下面是操作命令(请保证工作区干净,没有需要提交的代码)
# 把所有的文件都移除版本控制(一定要加--cached)
git rm -r --cached .
# 把所有的文件再次添加到版本控制
git add .
# 把代码提交一下
git commit -m "chore(git): reset gitignore"
全局设置
.gitignore文件是每个项目都会有一个,来列出要忽略的文件模式。但是在git中也可以设置一个所有项目都遵循的.gitignore,可以理解为所有的项目.gitignore文件都会继承这个父级的.gitignore。这样的话,如果你是一个java程序员,你可以把java通用模板设置成全局通用。设置方法如下:
- 在任意位置(但建议在~等有意义的目录下)创建一个.gitignore文件,把需要写入的通用表达式写入(下面命令是在~中)
- 在终端中执行
git config --global core.excludesfile ~/.gitignore
(转载本站文章请注明作者和出处 没有气的汽水)
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ├ 文章已经完啦, 想要第一时间收到文章更新可以关注↓ ┤ └┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘
Post Directory
下面是评论区,欢迎大家留言探讨或者指出错误哈