Git 代码管理中 .gitignore 文件无效的解决方法
来源:互联网 发布:淘宝客服每日知识总结 编辑:程序博客网 时间:2024/06/16 04:37
原文地址《Git 代码管理中 .gitignore 文件无效的解决方法》
在用 Git 进行代码管理的过程中,我们会发现后添加进去的 .gitignore 文件,或者是中途修改了 .gitignore 文件后,.gitignore 文件没有生效,我们需要通过清除 track 缓存和 强制 track 来解决问题。
OS: Mac OS X 10.10.3
Git: 2.3.2 (Apple Git-55)
SourceTree: 2.0.5.2
我们可以用 Git 命令行来解决以上问题。
先以一个 Android 项目作为演示,创建一个 Android 项目,然后不添加 .gitignore 文件,直接提交到本地:
从以上提交的结果可以看出,没有添加 Android 工程应有的 .gitignore 文件,比如 .class 文件没有被忽略掉。现在我们去下载 Android 工程对应的 .gitignore 文件:
https://github.com/github/gitignore
找到 Android 工程对应的 .gitignore 文件,下载保存起来。
备注:请保存文件的后缀名为 [.gitignore],另外:保存下来的文件名中,请将 [Android.gitignore] 修改成 [.gitignore],如果你还是 Android.gitignore 这样的文件名,会造成 .gitignore 文件无效!Windows 下面可能会出现修改失败的情况,可以用 [rename Android.gitignore .gitignore] CMD 命名来修改名字!
然后我们将此 .gitignore 文件添加到这个仓库中:
注意:如果你发现你添加了 .gitignore 文件之后,.gitignore 文件的变化没有被 track,那么你需要去 SourceTree 的全局 .gitignore_global 文件中查看 .gitignore 文件是不是被声明了不被 track!
SourceTree –> Preferences –> Git –> Global Ignore List
我们尝试的修改一下 .java 文件,并保存:
从上图中我们可以看到 .java 文件编译产生的 .class 文件依然被 track。而我们的 .gitignore 文件中是有 .class 文件的,说明这个时候添加的 .gitignore 文件是无效果的。
我们可以通过命令行的方式,解决以上问题!首先我们可以通过 SourceTree 界面中的 Terminal 打开 Git 命令行终端。或者你可以通过 Git 终端进入到当前项目的根目录:
我们首先在里面输入:”git rm -r –cached .”,此命令为清除缓存!
然后输入:”git add .”,此命令为添加更改变化!备注:此命令,你可以通过 SourceTree 这样的可视化客户端来通过勾选 unstaged files 来操作。
最后:”git commit -m”,此命令为添加更改变化!备注:此命令,你可以提过 SourceTree 这样的可视化客户端来通过点击 commit 来操作。
我们可以看到这样一操作的结果是:
我们看到上面删除了很多文件,而这些类型的文件正是 .gitignore 文件中声明的不需要被 track 的文件。这种删除是逻辑删除,非物理删除!
我们来测试下刚才的操作,是否让 .gitignore 文件重新生效:
从上图我们可以看出,修改了 .java 文件并保存,并没有出现编译文件 .class 被 track,这说明,这次的重新使 .gitignore 文件生效的操作是可行的!
如果说,我们现在又要添加某一类型的文件到 .gitignore 文件中,比如 .txt 文件,不让 .txt 文件被 track,我们还是按照刚才的步骤来操作即可!
比如,我们现在移除 .class 类型的文件:
对于以上情况,我们需要用到强制提交的命令:
git add -f *.class
我们修改一下 .java 文件然后保存,看看产生的编译文件 .class 是否再次被 track,答案是肯定的!如果你又想将 .class 文件添加到 .gitignore 文件中,我们采取第一种方式即可生效!
如果是中途从 .gitignore 文件中移除某一文件类型,想要这个文件类型重新被 track,需要通过以下命令行的方式,让 .gitignore 文件生效:
备注:注意你所处的分支,如果你在当前分支修改,切换到其他分支是不生效的,如果多人开发,注意合并修改!本人的这个答案在 Stack Overflow 上获得了较高的 Vote:
http://stackoverflow.com/questions/11451535/gitignore-not-working/32377642#32377642如果大家觉得这个答案对于你来说有帮助,也欢迎你给我的这个答案投个赞同票,谢谢!
2017-04-14(Fri) 追加:感谢读者提出来的本文中的一个显示错误:
以上命令行中 cached 前面有两个 “-“,这个主要是格式显示的问题。现已经修改!由于后台堆积了大量的垃圾评论,一不小心清除了提出本文中的一个显示错误的读者,在此表示感谢,如果这个读者看到了,可以告知我一下,谢谢!
- Git 代码管理中 .gitignore 文件无效的解决方法
- Git 代码管理中 .gitignore 文件无效的解决方法
- Git中.gitignore文件无效 不起作用的解决办法
- Windows平台.gitignore文件无效的解决方法
- git中.gitignore文件的使用方法
- Git中.gitignore文件的使用
- Git中.gitignore文件不起作用的解决
- git 的gitignore文件
- git的.gitignore文件
- git管理代码忽略无效文件
- Git .gitignore 添加后无效的解决办法
- .gitignore规则和忽略已经被git管理的文件
- git的.gitignore文件例子
- git的 .gitignore 文件编写
- 【Git】.gitignore文件的说明。
- .gitignore文件不起作用的解决方法
- git中关于文件是否加进版本控制管理库中的.gitignore文件配置
- git 添加 gitignore 规则无效
- java设计模式(精通系列)-Decorator
- KMP算法中next数组、nextval数组的手工计算
- Android UI卡顿监测框架BlockCanary原理分析
- .NetCore Enyim.Caching Memcached源码分析
- Hbase与Elasticsearch的jar包冲突解决办法
- Git 代码管理中 .gitignore 文件无效的解决方法
- java实现Multipart/form-data
- 关闭Pycharm拼写检查
- 【Java相关】二进制角度计算~0x99^0x66
- 【Java基础知识】 Annotation03_注解(Annotation)--注解处理器
- 常用电平标准——LVTTL、LVCMOS、LVDS等
- Superuser creation skipped due to not running in a TTY创建超级管理员报错
- Vuex2.0初识
- DPDK-实战之skeleton(basicfwd)