前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.gitignore 不生效问题

.gitignore 不生效问题

作者头像
haoming1100
发布2020-04-25 13:12:13
3.4K0
发布2020-04-25 13:12:13
举报
文章被收录于专栏:步履前行步履前行

最近在做一个新项目的时候,发现项目的 build/ .idea/ gradle/ .gradle/ 会在被提交的时候也提交到 gitlab 仓库中去了。所以想使用 .gitignore 文件忽略这些文件夹。

然后在 .gitignore 添加忽略后,还是不生效。如下:

所以第一反应是 .gitignore 规则无效

.gitignore 规则 不生效

我们一起来看下,不生效也就是有2种问题:

  • 规则写错(很多朋友不看官方文档,使用idea 直接 add -> .gitignore 的比较多)
  • 被纳入git tree 管理

首先请阅读下面文档或者查看官方文档

下面规则和例子翻译自官网,(原地址:https://git-scm.com/docs/gitignore)

  • 空行不匹配任何文件,因此可以用作分隔符以提高可读性。
  • 以#开头的行用作注释。("\") 对于以哈希开头的模式,请在第一个哈希之前放置反斜杠(“ \”)。
  • 除非使用反斜杠(“ \”)引号,否则将忽略尾随空格。
  • 可选前缀“ !”,用于否定模式;先前模式排除的所有匹配文件将再次包含在内。如果排除了该文件的父目录,则无法重新包含该文件。由于性能原因,Git不会列出被排除的目录,因此所包含文件上的任何模式(无论它们在何处定义)都无效。对于以文字“ ” 开头的模式(例如“ \”),请在第一个“ !” 前面加上反斜杠(“ ”)。!!important!.txt
  • 斜杠/用作目录分隔符。分隔符可能出现在.gitignore搜索模式的开始,中间或结尾。
  • 如果在模式的开头或中间(或两者)都有分隔符,则该模式是相对于特定.gitignore文件本身的目录级别的。否则,模式也可能在该级别以下的任何级别匹配.gitignore。
  • 如果模式末尾有分隔符,则该模式将仅匹配目录,否则该模式可以同时匹配文件和目录。
  • 例如,模式doc/frotz/ 匹配doc/frotz目录,但不匹配a/doc/frotz目录;但是frotz/匹配,frotz 并且a/frotz这是一个目录(所有路径都是.gitignore文件的相对路径)。
  • 星号“ *”匹配除斜杠之外的所有内容。字符“ ?”与“ /” 以外的任何一个字符匹配。范围符号(例如[a-zA-Z])可用于匹配范围内的字符之一。

" ** " 模式中与完整路径名匹配的两个连续星号(“ ”)可能具有特殊含义:

  • 前导“ **”后跟斜杠表示在所有目录中均匹配。例如,“ **/foo”与文件“ foo”相同的任何位置都匹配文件或目录“ foo”。“ **/foo/bar” bar会在目录“ foo” 下的任何位置匹配文件或目录“ ”。
  • 尾部的“ /”与内部的所有内容匹配。例如,“ abc/”将目录“ abc” 内的所有文件(相对于.gitignore文件位置)以无限深度进行匹配。
  • 斜杠后跟两个连续的星号,然后斜杠匹配零个或多个目录。例如,“ a/**/b”匹配“ a/b”,“ a/x/b”,“ a/x/y/b”等。
  • 其他连续的星号被视为常规星号,并将根据之前的规则进行匹配。

例子

  • hello.匹配名称以开头的任何文件或文件夹hello。如果只想将此限制于目录而不是其子目录,则可以在模式前面加上斜杠,即/hello.;模式现在匹配hello.txt,hello.c但是不 匹配a/hello.java。
  • foo/将匹配目录foo及其下的路径,但不匹配常规文件或符号链接foo
  • doc/frotz和/doc/frotz在任何.gitignore文件中都具有相同的效果。换句话说,如果模式中已经存在中间斜线,则前导斜线不相关
  • “ foo / *” 匹配 “ foo / test.json”(常规文件),“ foo / bar”(目录),但不匹配“ foo / bar / hello.c”(常规文件) ),因为该模式中的星号与其中带有斜线的“ bar / hello.c”不匹配

删除加入 git 管理的无用文件

由于疏忽 直接使用 git add -A ,把无用的文件纳入 git 管理。这时候再加入 .gitignore 已经没有效果了,可以直接使用下面的命令,从暂存区中移除

代码语言:javascript
复制
git rm --cached <file>   其中 <file> 是文件名或者目录
结果

由于文件并没有纳入git 管理,重新改写 .gitignore 文件,完美解决,下面附上规则

代码语言:javascript
复制
gradle/
.idea/
build/
/gradlew.bat
/gradlew
/LOG_FILE_IS_UNDEFINED
/out
.gradle/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • .gitignore 规则 不生效
    • 首先请阅读下面文档或者查看官方文档
    • 例子
      • 删除加入 git 管理的无用文件
        • 结果
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档