有时候我们添加.gitignore文件之前已经提交过了文件。.gitignore只能忽略那些原来没有被track的文件(自添加以后,从未 add 及 commit 过的文件),如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。就需要执行:

 
git rm -r --cached . #删除追踪状态
git add .
git commit -m "fixed untracked files"

一. 问题
在初始化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文件, 并且把忽略规则写好(尽量考虑到所有应该略的文件, 这样就可以避免出现上面的文件啦)

references:
git忽略已经被提交的文件
"git rm" 和 "rm" 的区别

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



git忽略已经提交的文件【转载】的更多相关文章

  1. git 忽略不提交的文件3种情形

    1..gitignore文件 :从未提交过的文件,从来没有被 Git 记录过的文件 也就是添加之后从来没有提交(commit)过的文件,可以使用.gitignore忽略该文件.只能作用于未跟踪的文件( ...

  2. git中避免提交.DS_Store文件[转载]

    1. 先删除原有的.DS_Store: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch 命令解释:在当前文件夹 ...

  3. Git 忽略已经提交的文件

    如果想在本地忽略某个文件的话执行这个命令: git update-index --assume-unchanged <file> 如果想重新同步这个文件的话执行这个命令. git upda ...

  4. git忽略已提交的文件或目录

    项目中的某个文件或目录已经被commit,并push到远程服务器server了. 这时发现要忽略该文件或目录,在.gitignore文件里面添加规则已经不起作用了.因为.gitignore只对从来没有 ...

  5. Git删除已提交的文件

    Git删除已提交的文件 Git删除已提交的文件 定位文件 删除文件 参考链接 昨天通过Git Bash提交代码的时候遇到了由于单个文件大小超过100M,导致代码上传失败的问题.考虑到那个大文件是用于训 ...

  6. 设置SVN,Git忽略MAC的.DS_Store文件的方法

    设置SVN,Git忽略MAC的.DS_Store文件的方法 I. 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bo ...

  7. git忽略一些提交上传的文件

    在项目开发的过程中有两种文件是不需要提交的. 1.一些很重要的配置文件 包括服务器地址 账号密码 数据库密码 公私钥等等 2.一些由于开发和沙箱环境和线上环境的差异 不能使用同一个时候 需要同一个文件 ...

  8. git忽略而不提交文件的3种情形

    1.从未提交过的文件可以用.gitignore 也就是添加之后从来没有提交(commit)过的文件,可以使用.gitignore忽略该文件 该文件只能作用于未跟踪的文件(Untracked Files ...

  9. git忽略规则以及.gitignore文件不生效解决办法

    正文 Git忽略规则: #此为注释 – 内容被 Git 忽略 .sample # 忽略所有 .sample 结尾的文件 !lib.sample # 但 lib.sample 除外 /TODO # 仅仅 ...

随机推荐

  1. 小米2S手机 - Charles无法安装证书 因为无法读取证书

    1.不要使用小米原装的浏览器安装证书 2.使用第三方浏览器安装,如我使用的是UC浏览器 3.使用第三方浏览器安装的证书格式是".pem"格式问卷 4.将这个文件放入小米的downl ...

  2. C#/Java 程序员转GO/golang程序员笔记大全(day 01)

    前言: 整理一下学习 Go 语言的笔记,作为一名老程序,学习一名新的开发语言自然不需要像小白那样从 HelloWorld 看起. 简单整理一下 Go 的一些差异处,希望对大家学习 go 有点帮助,不正 ...

  3. Xcode各版本

    官方下载, 用开发者账户登录,建议用Safari浏览器下载. 官方下载地址: https://developer.apple.com/xcode/downloads/ Xcode 7 beta 3:h ...

  4. Ansible 开发调试 之【模块调试】

    本地调试 需要安装jinja2 库 yum -y install python-jinja2 使用官方提供的测试脚本调试 git clone git://github.com/ansible/ansi ...

  5. Java复习8.多线程

    Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...

  6. vue单独给页面设置body属性

    因项目需求:用户个人详细信息页面设置背景色,之前在这个页面设置最外层div发现不行.因为app.vue影响了它.后来直接在页面上用body设置样式,发现影响了其他页面. 后来想了通过vue的生命周期来 ...

  7. spring --解析自定义注解SpringAOP(配合@Aspect)

    1:首先,声明自定义注解 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface DtT ...

  8. Code Cache相关知识总结

    codecache代码缓存区,主要存放JIT所编译的代码,同时还有Java所使用的本地方法代码也会存储在codecache中.不同的jvm.不同的启动方式codecache的默认值大小也不尽相同. J ...

  9. Silverlight5_Tools安装报错解决方案

    将Silverlight5_Tools.exe解压,依次安装 VS10SP1-KB2615527.exe silverlight_sdk.msi RiaServices.msi

  10. Django项目的ORM操作之--模型类数据查询

    1.查询基本格式及理解: 类名.objects.[查询条件] 例如我们要查询数据库中一张表(bookinfo)的所有数据,sql语句为:select * from bookinfo, 对应模型类的操作 ...