一. 问题
在初始化git仓库的时候没有创建.gitignore文件来过滤不必要提交的文件, 后来却发现某些文件不需要提交, 但是这些文件已经被提交了, 这时候创建.gitignore文件忽略这些文件时, 发现ignore的规则对那些已经被track的文件无效.

其实.gitignore文件只会忽略那些没有被跟踪的文件, 也就是说ignore规则只对那些在规则建立之后被新创建的新文件生效. 因此推荐: 初始化git项目时就创建.gitignore文件.

那么如何使.gitignore文件的规则对于那些已经被track的文件生效呢 ?

二. 解决方法
网上有人说使用git update-index --assume-unchanged /path/to/file 这个命令来将已经track的文件标记一下, 使其不出现在更新列表中(git status不会列出标记过的文件), 其实这是治标不治本的做法. 这样做, 只在你的项目中生效. 如果是一个团队, 其他开发人员也需要这么做. 而且这个命令只对文件有效. 如果有很多需要忽略的文件呢?? 用正则表达式! 是的, 这样git update-index --assume-unchanged /path/to/* . 可是这样只对某个目录下的所有文件有效, 如果要迭代某个目录下的所有文件和子目录下的所有文件呢? 这个我暂时还不知道怎么弄, 知道的朋友可以告诉我 (♥◠‿◠)ノ. 总之, 用这个命令来解决问题非常麻烦 !! 你可以参考一下关于此命令的相关讨论 ==> 点这里
这个讨论里面也给出了真正的解决方法, 那就是:

  1. 删除track的文件 (已经commit的文件)
  • git rm 要忽略的文件
  • git commit -a -m "删除不需要的文件"
  1. .gitignore文件中添加忽略规则
  • (1) 在.gitignore文件中添加ignore条目, 如: some/path/some-file.ext
  • (2) 提交.gitignore文件: git commit -a -m "添加ignore规则"
  1. 推送到远程仓库是ignore规则对于其他开发者也能生效: git push [remote]

tips: 上述步骤针对已经commit过的文件 (当然如果是commit过的文件且又有改动也是同样生效)

这样其他开发人员同步之后, 新的ignore规则就会对以前track过的文件生效了 (因为以前track的文件已经被untrack且被删除了, 如果还有这样的文件, 那肯定是新生成的! )

如果文件比较少可以直接, git rm掉那些不必要的文件. 有时会跟踪一些IDE的生成文件, 如Android Studio的.idea目录 或 构建输出文件 如 build目录下的文件. 对于build目录中的文件都是不需要跟踪的, 重新构建之后此目录就会更新, git status后发现此目录下的文件在更新列表中, 那么你可以使用git rm -r --cached命令 (删除工作空间中有改动的那些文件, 用git status可以看到cached的列表) 结合正则表达式来快速删除目录中的文件和子目录中的文件. 因此对于已经track且有改动的文件添加ignore规则, 如下:

  1. git rm -r --cached 要忽略的文件 (如: git rm -r --cahced build/*, 如修改列表中的内容全部是不需要的, 那么你可以使用最最简单的命令搞定git rm -r --cached .)
  2. git add .
  3. git commit -m " commet for commit ....."
  4. git push

push之后其他开发人员pull之后, ignore规则就对其生效了.

tips: 上述步骤只针对已经commit过且有改动的文件 (因为rm的是cached列表中的文件, cached列表即修改列表)

三. 总结

  1. 最好创建git仓库的同时创建.gitignore文件, 并且把忽略规则写好(尽量考虑到所有应该略的文件, 这样就可以避免出现上面的文件啦)

参考文章:

https://www.jianshu.com/p/e5b13480479b

git如何忽略已经提交的文件 (.gitignore文件无效)相关推荐

  1. $git学习总结系列(4)——gitignore文件

    有时候工作区中会有我们创建的一些密码配置文件,或者自动生成的一些临时文件,比如python代码编译产生的.pyc文件和java代码编译产生的.class文件等,我们在提交代码的时候没有必要把这些文件也 ...

  2. git删除相关历史提交记录,相关文件保持当前状态

          git删除相关历史提交记录,相关文件保持当前状态 引言   新年新气象,趁着现在新的一年开始项目的事情还不是非常繁忙的时候,多整点下酒菜.这不实战类型的博客记录又开始了!当然实战类型的博客 ...

  3. 【Git/Github】第一次提交和再次添加文件

    文章目录 git 提交指令 git 提交指令 git init git add . # 将当前文件添加到 .git 文件中 git commit -m "first commit" ...

  4. git 忽略文件 .gitignore 以及规则

    git提供了文件忽略系统,当对工作区某个目录或文件设置了忽略后,在执行status查看状态时,被忽略的文件即使存在也不会显示出来. 这样我就可以把那些不需要上传,不需要保留的文件或目录忽略掉(比如一些 ...

  5. git pull忽略指定文件_Git忽略提交规则

    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交. 简单来说一个场景:在你使用git add .的时候,遇 ...

  6. .gitignore文件_Java小白入门,Git忽略文件.gitignore详解

    在工程中,并不是所有文件都需要保存到版本库中的,例如"target"目录及目录下的文件就可以忽略.在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件 ...

  7. Git忽略文件.gitignore详解

    文章目录 Git 忽略规则优先级 Git 忽略规则匹配语法 常用匹配示例 .gitignore规则不生效 Java项目中常用的.gitignore文件 在工程中,并不是所有文件都需要保存到版本库中的, ...

  8. Git忽略文件.gitignore规则详解

    在工程中,并不是所有文件都需要保存到版本库中的,例如"target"目录及目录下的文件就可以忽略.在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件 ...

  9. 如何使Git“忘记”已跟踪但现在位于.gitignore中的文件?

    git正在跟踪一个文件,但是现在该文件在.gitignore列表中. 但是,该文件在编辑后一直以git status显示. 您如何迫使git完全忘记它? #1楼 如果由于其他人可能需要而无法git r ...

最新文章

  1. 【codeforces 796A】Buying A House
  2. C语言试题十六之写删除字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。
  3. python和qt哪个好_做个小的桌面用node还是QT比较好? - Web开发 - WebDev - 水木社区...
  4. 华为云MySQL数据库外网使用
  5. django命令大全
  6. UIControl IOS控件编程—IOS开发
  7. uniapp APP 接入萤石云
  8. 上海财经应用统计考python_20上财应用统计415分经验帖(初试第一)
  9. 《学会提问》01| 批判性思维
  10. 面试官问你为什么离开上一家公司该怎么回答? 1
  11. 如何制作网页教程:如何制作网页最简单的方法
  12. Keil报错:Libraries\CMSIS\stm32f10x.h(298): error: #67: expected a }
  13. css3实现流星划过动画效果
  14. flash 与3D笔记:图片墙(1)
  15. Python培训班多少钱
  16. 微信小程序wx.getLocation()报错以及解决方法
  17. 光环国际20周年庆六城联动峰会「北京场」圆满结束!
  18. Three.js用鼠标控制场景移动的代码
  19. c语言程序女设计教学效果分析,提高C程序设计教学效果的策略
  20. powerpoint快速插入多张图片

热门文章

  1. 彻底理解 Redis 的持久化和主从复制
  2. Spring Boot Admin 2.2.0发布,支持最新Spring Boot/Cloud之外,新增中文展示!
  3. Spring Aware 到底是个啥?
  4. 容器与微服务从技术到艺术 你需要这场论坛
  5. 社区头条:Spring For All 新版上线了!!!
  6. u2net encode
  7. conda 修改缓存路径
  8. vs2015中文乱码
  9. raspberry pi 3B 树莓派 安装tensorflow
  10. 机器学习之用Python从零实现贝叶斯分类器