小乌龟操作git之忽略文件

git的忽略文件

1、为什么需要忽略文件

在我们的项目中,总有一些文件或者目录不想或者不能被纳入版本控制中。
比如:日志文件、开发工具的配置文件、java中的.class文件等。
这些文件都是针对开发者的,每一个开发者的日志文件、开发工具的配置文件都不一致,
如果纳入版本控制后,会对团队中其他成员的项目造成影响:每次进行代码合并的时候都会产生冲突。

因此,我们应该养成良好的习惯,每个项目中都应该有一个.gitignore文件,来忽略不想被纳入版本控制的文件。

git也考虑到这个功能,所以使用.ignore文件提交给开发者来进行选择,去忽略哪些开发者指定忽略的文件

2、忽略文件的生效时机

.gitignore文件的生效时机是:要忽略的文件还没有被纳入版本控制中。
即:如果一个文件已经做过一次提交了,那么,即便是在.gitignore文件中添加此文件进行忽略,也不会起作用!

3、忽略文件的语法

在使用springboot项目初始化构建的时候,会主动生成一个.ignore文件。

具体如下所示:

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/

### VS Code ###
.vscode/

那么来看一下对应的语法。

1)每一行表示一个匹配规则,空行会被忽略;
2)以 # 开头的行表示注释,可以使用反斜杠进行转义;
3)空格不匹配任何的文件,可以作为分隔符,可以使用反斜杠进行转义;
4)* 表示匹配零个或多个任意字符;
5)** 表示匹配任意中间目录;如 :a/**/z 可以匹配 a/z, a/b/z 或者 a/b/c/z;
6)? 表示匹配任意一个字符;
7)[abc] 表示匹配任意一个括号中的字符;
8)[a-z] 表示匹配任意一个括号中的两个字符的范围之内的字符;
9)以斜杠/开始表示目录且表示根目录;
10)以斜杠/结束的模式表示只匹配文件夹以及该文件路径下的内容,不匹配该文件;
11)如果一个模式不包含斜杠,则它匹配相对于当前.gitignore文件路径的内容,如果该模式不在.gitignore中,则相对于项目根目录
12)! 表示对.gitignore中的模式进行取反;即:取消对应的忽略,继续追踪对应的文件。
13)git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;
# 忽略 .a 文件
*.a
# 不忽略 lib.a, 尽管已经在前面忽略了 .a 文件
!lib.a
# 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO
/TODO
# 忽略 build/ 文件夹下的所有文件
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 文件,包括在 doc/ directory 下的
doc/**/*.pdf

3.1、忽略指定文件

a.txt: 忽略所有目录下面的 a.txt 文件
/a.txt: 仅忽略根目录下面的 a.txt 文件(防止递归忽略所有的 a.txt文件)
/f001/aa.class : 具体忽略 某个目录下面的 某个文件。忽略根目录下的f001文件夹下的aa.class
*.txt: 忽略所有目录下面的以 .txt 结尾的文件【递归】
**/*.class: 忽略 任意目录下面的 以 .class 结尾的文件
f1/**.class:忽略与.gitignore文件同目录下的 f1目录下的 所有以.class结尾的文件
f001/**/*.class:忽略 与 .gitignnore 文件同目录的 f001 目录下面任意级目录下的 以.class结尾的文件

3.2、忽略指定文件夹

/f001_1/: 忽略根目录下面的f001_1目录
f001_1/ : 忽略 所有的 f001_1目录,/f001_1/,/a/b/f001_1/ 等等
f001_1/* : 忽略 与.gitignore 文件同目录下的 f001_1的目录的所有的内容

总结一下:

如果不以/开头,那么标识的是忽略所有。不管是文件还是文件夹:

aa/:标识忽略任意文件夹下的aa目录;

aa/*:标识忽略根目录下的aa文件夹下的aa目录;

aa.txt:表示忽略任意文件夹下的aa.txt文件;

如果以/开头,那么表示的是相对于根路径而言;

4、四种情况讨论

这里分为四种情况:

1、想忽略的文件未提交到暂存区;

这种是最简单的方式

这个时候新增忽略文件。那么忽略文件中配置的指定文件或者是目录将会被忽略。

2、想忽略的文件提交到暂存区未提交到本地仓库;

这个时候借助git命令行方式

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

3、想忽略的文件提交到本地仓库;

这个时候借助git命令行方式,首先清除掉.ignored文件的缓存,然后重新提交上去.

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

这种清理方式还是比较安全的,因为会有日志记录下来,想要回滚的时候也是可以来进行回滚到的.

4、想忽略的文件已经在远程仓库;

可以手动清空,或者是使用上面的命令。

git:修改.gitignore后生效https://blog.csdn.net/flyingnet/article/details/122708344

posted @ 2022-06-12 13:21  雩娄的木子  阅读(3548)  评论(0编辑  收藏  举报