.gitignore文件用法及如何配置

.gitignore文件用法如何配置(笔记)

.gitignore文件是在git提交的时候用来屏蔽某些你不想提交上去的文件。
项目开发过程中,有时候不想把一些文件(如中间文件/编译文件等)提交到git上。这个时候就由.gitignore文件来筛选出不想提交的文件。所筛选的文件/夹将不会被追踪(tracked),push的时候也不会上传到git上。

**以下用法配置是单片机C开发项目中的

创建

我们需要在提交Git之前,需要自己创建一个.gitignore文件,由于Windows下创建文件必须键入文件名,而要创建的.gitignore文件是没有文件名的,所以我们可以使用move命令来实现,打开Git Bash ,使用mv gitignore.txt .gitignore,然后用编辑器编辑这个文件。

语法规范

  • #:开头的行表示注释行
  • *:用来匹配零个或多个字符
    *.a表示忽略.a文件;
    *.[oa]表示忽略所有以.a和.o结尾的文件,*~忽略所有以~结尾的文件;
    []用来匹配括号内的任一字符,如[abc],也可以在括号内加连接符,如[0-9]匹配0至9的数;
    ?用来匹配单个字符;
  • !:用来否定忽略
    比如前面用了*.txt,然后使用!*a.txt,则这个a.txt不会被忽略
  • /:
    正斜杠在前:匹配项目跟目录;如/bin表示忽略根目录下的bin文件,/bsp表示忽略根目录下的bsp文件夹,但不忽略子目录里的user/bsp文件夹;
    正斜杠在后:匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;如bsp/表示忽略bsp文件夹里的所有文件;
  • **:匹配多级目录,可在开始,中间,结束;

忽略优先级

在.gitignore文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低):

  1. 从命令行中读取可用的忽略规则
  2. 当前目录定义的规则
  3. 父级目录定义的规则,依次递推
  4. $GIT_DIR/info/exclude 文件中定义的规则
  5. core.excludesfile中定义的全局规则

常见例子

1、忽略.bin文件

#忽略所有的.bin文件
*.bin

2、否定忽略 link.bin

#不忽略目录下的link.bin
!link.bin
#不忽略obj目录下的link.bin
!/obj/link.bin

3、忽略某目录.txt, 不包括子目录.txt

#忽略doc/notes.txt, 不包括doc/server/arch.txt
doc/*.txt

4、忽略某目录内所有的.pdf 文件

#忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf

5、忽略当前目录.c,不忽略子目录.c

#忽略 cat.c,不忽略 build/cat.c
/*.c

6、忽略当前路径下的Proj文件夹,该文件夹下的所有内容都会被忽略

#忽略当前路径下的Proj文件夹,该文件夹下的所有内容都会被忽略
Proj/

7、忽略Proj文件夹子目录文件夹

#忽略Proj文件夹子目录Obj文件夹里的所有文件
Proj/Obj/

8、忽略根目录下的某文件

#忽略根目录下的bin文件
/bin: 

9、忽略/foo, a/foo, a/b/foo等

#忽略/foo, a/foo, a/b/foo等
**/foo: 

10、忽略a/b, a/x/b, a/x/y/b等

#忽略a/b, a/x/b, a/x/y/b等
a/**/b: 

11、忽略当前路径的某文件

#忽略当前路径的 config.php 文件
config.php: 

.gitignore规则不生效

一、.gitignore只能忽略那些原来没有被追踪(tracked)的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

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

二、你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了:

$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.

如果你确实想添加该文件,可以用-f强制添加到Git:

$ git add -f App.class

三、或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:

$ git check-ignore -v App.class
.gitignore:3:*.class    App.class

Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。

忽略已提交文件中的变化

临时忽略变更

在开发阶段,有时候需要临时忽略本地仓库中已提交的文件的变更。例如,你的配置文件与本机的工作环境或者项目配置有关,那么这个操作就非常有用:

git update-index --skip-worktree <file>

当然也可以恢复文件的追踪:

git update-index --no-skip-worktree <file>

也可以通过以下方式进行。这主要是为了防止文件被开发者修改。
关闭变更追踪:

git update-index --assume-unchanged <file>

恢复变更追踪:

git update-index --no-assume-unchanged <file>

永久忽略文件变更

如果一个文件已经被 Git 跟踪,那么再将这个文件添加到 .gitignore 中并不会忽略文件变更。你还需要从Git 暂存区(index)中移除这个文件的信息,步骤如下:

  1. 在.gitignore中添加这个文件
  2. 从暂存区移除文件信息:
git rm --cached  <file>
  1. 提交删除文件和更新的.gitignore到您的仓库

注:以上步骤不会从系统中删除文件,只是告诉Git以后忽略该文件的变更


以上是最近在用.gitignore文件时查阅的一些资料,感谢以下大神的帖子:

https://blog.csdn.net/weixin_45318845/article/details/120740012
https://blog.csdn.net/wnvalentin/article/details/105448739

如有描述有误的地方欢迎大家指出,感谢!

  • 57
    点赞
  • 193
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值