为什么需要ignore , 我的ignore为什么不生效

124 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

前言

  • git 管理项目真的很方便,但是有的时候随着项目的测试或者编译产生很多无用文件比如 java 项目编译产生的 class 文件这些是没有必要上传到仓库的,所以 git 提供了 ignore 功能

ignore

  • 我们只需要在仓库根路径下添加 .ignore

  • .gitignore 文件内容也非常简单,只需要填写我们需要过滤的路径即可 . 下面给出我在项目中使用的 .gitignore

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

规范说明

规范说明
1. 空行或者#开头的将会被git忽略
2. 支持 glob 模式匹配 及 正则匹配
3. / 表示忽略整个目录
4. ! 表示取反忽略
glob模式说明
1. * 表示匹配0个或者多个任意字符
2. [] 匹配方括号内任意一个字符
3. ? 表示匹配任意一个字符
4. [m-n] 表示匹配范围内字符 比如 [a-z] 表示小写字母 ; [a-z]* 表示匹配任意小写字母组成的单词

全局配置

  • ignore 正常情况是配置在每个项目中,但是也是支持配置全局的。比如我们的git config user.name 正常是全局配置,也看看呀配置在单独每个项目中。如下配置全局 gitignore 文件。
git config --global core.excludesfile ~/.gitignore 

gitignore不生效

  • 有的时候在 .gitignore 文件中配置了忽略规则,但是修改对应文件后还是被git提示modified 。比如我的项目中有 20200413trace.txt 。 我在 .gitignore 中配置了忽略规则 [0-9]*trace.txt

  • 这是因为 .gitignore 只会忽略尚未被 git 管理的文件及文件夹。因为 .gitignore 创建之前 20200413trace.txt 已经被 git add 到仓库中了。所以就忽略无效。

  • 这种情况我们可以使用 git rm -f --cached folder 的方式进行删除缓存后将需要忽略的文件或者文件夹退出git管理,然后才能生效,要注意我们还得通过git commit & git push 进行对删除的操作同步到远程。

解决

git rm -r --cached 20200413trace.txt
  • 此时我们commit 之后就可以完全忽略文件了。

  • 剩下我们就只需要将.gitignore 文件提交到git 仓库即可。