git的ignore文件规则失效

git的ignore文件规则失效

背景

在某次项目,发现已经将.iml规则写进.ignore文件,但是对.iml的修改依然会出现在changelist中。

解决方案

先引用git官网上的描述

gitignore - Specifies intentionally untracked files to ignore

.gitignore只能忽略那些没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态)

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

拓展

  • git ignore规则

    • 空行不匹配任何文件,可以提高可读性
    • #开头的行会被当作注释
    • !取反,之前被ignore的文件会重新include
    • /结尾的规则,只会匹配文件夹
    • 规则中不包含/,git会查找相对于ignore的位置
    • 通配符不匹配路径中的/
    • **/开头的规则匹配所有的文件夹 eg:**/target匹配任何文件夹下的target文件或文件夹
    • /**结尾的规则递归匹配该文件夹下的所有内容 eg:src/**匹配src下面所有的文件或文件夹
    • 规则中包含/**/匹配0个或多个文件夹 eg:a/**/b匹配a/b,a/z/b,a/d/s/b
  • intellij的“bug”

    intellij中编辑ignore规则命中的文件时,其插件version control会短暂出现在changelist,有两个方案可以清除这个问题。

    1. cmd+s保存文档
    2. 切换application动作发生,例如从IDE切换到桌面这种动作

参考文档

git .ignore

作者: wuzhaoyang(John)
出处: http://wuzhaoyang.me/
因为作者水平有限,无法保证每句话都是对的,但能保证不复制粘贴,每句话经过推敲。希望能表达自己对于技术的态度,做一名优秀的软件工程师。