.gitignore文件的使用方法(学习总结版)
平时总是喜欢把日常学习的代码以代码库的形式上传到Gitee或Github上(Github上的代码正逐渐迁移至Gitee上),但是有时候总有一些中间编译的文件不行要一起上传,原有有两个:
1.是不行Gitee上代码库中文件内容太过于杂乱有碍观瞻,
2.是因为太多无用文件的上传有些太占用空间,毕竟Gitee不像Github是对空间总量有限制的,做事情也是要长远计划一下占用率才行。
而解决git管理的代码库中对某些文件和文件夹的忽略就需要使用.gitignore文件了。
现在在Gitee上创建代码库都是可以手动选择不同语言所对应的.gitignore文件的,但是即使这样对某些项目中特定的文件和文件夹的忽略也是需要我们手动来进行配置的,因此学会使用一些.gitignore基本用法还是很有必要的。由于Github上不能自动创建.gitignore文件,因此在Github上创建.gitignore文件可以参考模板: 鬼&泣 / gitignore:https://gitee.com/devilmaycry812839668/gitignore
=======================================
要想学习.gitignore文件的编写首先需要知道文件和文件夹的路径表示方法:
mtk
表示一个无路径的文件mtk或文件夹mtk(因为文件夹也是一种特殊的文件)
mtk/
表示一个无路径的文件夹mtk
/home/mtk
表示/home路径下的一个文件mtk或文件夹mtk
/home/mtk/
表示/home路径下的一个文件夹mtk
可以知道,如果在一个name前面加“/”则表示指定路径下的名为name的文件或文件夹,如果在一个name后面加“/”则无指定路径下的名为name的文件夹。
扩展一下,如果在一个name前面和后面都加“/”则表示指定路径下的名为name的文件夹,如:/home/mtk/ 代表/home路径下的名为mtk的文件夹。
-----------------------------------------------------------
有了对指定路径和不指定路径的文件和文件夹写法的了解就可以看下.gitignore文件的写法了。
注意:
.gitignore一般放在项目目录的顶层,从Linux目录挂载的角度来看.gitignore所在的目录路径则为根目录“/”,因此如果在.gitignore文件中指定忽略文件或文件夹的路径的话起始根目录“/”均为.gitignore所在的目录路径。
在 .gitignore 中写:
mtk 代表根目录“/”及所有子目录及其迭代子目录下的名为mtk文件及文件夹均被忽略。
mtk/ 代表根目录“/”及所有子目录及其迭代子目录下的名为mtk文件夹被忽略。
/xxx/mtk 代表目录“/xxx”下的名为mtk文件及文件夹均被忽略。
/xxx/mtk/ 代表目录“/xxx”下的名为mtk文件夹被忽略。
在 .gitignore 文件中可以写忽略条件同时也可以写不忽略的条件,那就是在条件前加 “ !” 。
如:
!mtk/1.txt 表示不忽略根目录“/”及所有子目录及其迭代子目录下的名为mtk文件夹下的名为1.txt文件及名为1.txt的文件夹。
!/mtk/1.txt 表示不忽略目录“/mtk”下的名为1.txt的文件及名为1.txt的文件夹。
既然在.gitignore 文件中既可以写忽略条件也可以写不忽略条件,那么一旦发生冲突那怎么处理呢?
其实这个在 .gitignore 中很常见,.gitignore 的条件规则的生效是从上到下的,也就是说如果新设定与旧设定有冲突,那么冲突的地方按新设定为准,如:
/mtk
!/mtk/1.txt
第一条设定表示忽略/mtk文件及文件夹,这当然也包括忽略/mtk文件夹下的所有内容;第二条设定表示不忽略文件夹/mtk/下的名为1.txt的文件及文件夹。最终的生效结果就是/mtk目录下的所有文件除了/mtk/1.txt文件及/mtk/1.txt/文件夹不忽略其他的均忽略掉。
在 .gitignore 中使用 “ ! ” 还有一个比较少见的场景,写法如下:
mtk
!mtk/
因为文件夹也是一种文件,所以第一行的设定表示忽略不指定路径下的名为mtk的文件及文件夹,但是我们实际只想忽略名为mtk的文件而不想忽略名为mtk的文件夹,就可以用上面的写法。
那么如何只忽略不指定路径的名为mtk的文件夹呢,那就这样写:
mtk/
=========================================
.gitignore 文件的高级写法
上面写的都是 .gitignore 文件的基础用法,下面介绍高级用法,也就是通配符的使用。
常用通配符:
(1)星号“*” :匹配任意多个字符,'/' 符号除外;
(2)问号“?”:匹配任意单个字符,'/' 符号除外;
(3)中括号“[xxx]”:匹配括号内多个字符中的任意一个,功能与“?”符号相类似,只不过设定了可以匹配的范围,与其他通配符相同这里的匹配字符不能包括'/' 符号;
在 .gitignore 中通配符都是用来匹配多个文件或文件夹名的,因此不允许包括路径名,所以代表路径分隔符的 '/' 符是不允许包括的。
具体用法:
abc*def 表示名前缀为abc后缀为def的文件及文件夹,如abc123def,abcwsxdef,abc9p9def 等;
abc?def 表示名前缀为abc后缀为def的并且中间只有一个字符的文件及文件夹,如abc1def,abcwdef,abc9def 等;
abc[123xyz]def 表示名前缀为abc后缀为def的并且中间只有[123xyz]中任意一个字符的文件及文件夹,如:
abc1def,
abc2def,
abc3def,
abcxdef,
abcydef,
abczdef
双星号 “**” 的用法,或者叫做“/**/”的用法:
“/**/” 并不是通配符但是也具备一定的通配作用,“/**/” 表示多级目录,直白的所就是可以表示中间带有“/”的字符串,当然如果“**”可以表示为空,那么“/**/” 表示为“/”。
src/**/mnt 表示路径名称中前面具有src文件夹路径而路径最后面为mnt的任意存在的路径,
如:
src/xxx/yyy/mnt
src/xxx/zzz/mnt
src/xxx/mnt
src/mnt
-----------------------------------------------------------------------------
其他:
在 .gitignore 中注释是以 “#” 开始的。
空行不匹配任何文件及文件夹,或者说空行只表示空行。
由于git不跟踪空目录,因此即使空目录符合.gitignore中的忽略条件也不会被忽略(因为空目录也不会被跟踪也就不存在被忽略这一说了),因为git根本也不会对其进行跟踪。
.gitignore 文件一般在创建代码库之初时创建,因为符合被忽略条件的文件被提交到代码库后才创建 .gitignore 文件也不会影响已经提交到代码库中的文件。
---------------------------------------------
posted on 2022-07-27 10:58 Angry_Panda 阅读(2958) 评论(0) 编辑 收藏 举报