Git 之 .gitignore 不生效
引言
有时候太顺了也不是一件好事,有时候不从头自己做一遍你也永远不会发现自己知识的薄弱点
最近,遇到了一件比较有趣的事,事情的经过是这样的:.gitignore
已经忽略了build
、.gradle
文件夹下的内容,但是IDEA
编译后还是会在控制台追踪这两文件夹下的变化
历程
首先,这是第一次遇到这种情况,第一反应便是:怎么可能?明明已经在.gitignore
添加了build
、.gradle
这两文件夹了呀,这绝对不可能,思考了一会儿,我觉得应该是电脑的问题,重启一下可能就好了?
然后,结果当然不是我意料之中那般,在我编译代码后,build
和.gradle
文件夹下的内容还是会被追踪到,就像下图这样生成一大坨完全看不懂、用不到的文件,而更可气的是它还给我追踪到并展示出来,这让我去找需要提交的那一个变更文件
显得有些费时(是的,改一个文件,编译生成一坨,然后去找改的那个)
当然,在我还不知道为何会造成这种情况之前,我也不能如此毫无效率的在一大堆文件里去找我需要的那一个文件呀,这样太耗时了,因此这里我自己给自己提供了两种解决方法:
- 指令提交,
add
需要提交的那个文件即可,然后其他文件回退 - 图示化操作,在修改完文件后,先将变动的文件勾选上,再编译,然后其他文件回退
我是比较钟爱图示化操作的,谁叫它方便呐,但是遇到这种情况确实也很令人头大,虽然在上面的方法下,不会造成太大的影响,但是影响美观、影响心情确实是必然的呀~
所以,我还是决定去一探究竟......
解决
首先,需要排除的便是.gitignore
文件的问题,因为它已经确确实实的加入了build
、.gradle
接下来,便是思考为什么会出现.gitignore
不生效的原因
但是,在这一步,我先去了解了一下.gitignore
生效的时机,就是被加入到.gitignore
的文件或文件夹什么时候才不会被追踪、会被忽略?
然后,一查便发现了问题所在:.gitignore
文件只能忽略那些还没有纳入版本控制的文件,如果某些文件已经被纳入了版本控制中,则修改.gitignore
将不能生效
哦,原来如此,也就是说,build
和.gradle
文件已经被纳入版本控制的文件了,已经被追踪了,所以.gitignore
管不到了,那要怎么解决?
反正我知道问题后的第一个想法便是,从头再重新提交,这次要有.gitignore
文件,且里面要编写好需要忽略的文件
最后,解法也大差不差,但是没有严重到重新初始化项目重新提交的程度,只需要清空一下暂存区的缓存,然后再提交即可:
# 清空本地缓存
git rm -r --cached .
git rm -r --cached .
git
:这是Git版本控制系统
的命令行接口rm
:缩写形式,用于删除Git仓库
中的文件或目录-r
:这个选项代表递归
,意味着它将递归
地删除目录及其内容--cached
:从Git索引中(也称为暂存区)
中删除文件或目录不会影响工作目录中的文件.
(点号):这是git rm
命令的路径参数,.
代表当前目录及其所有内容
小结
如果意外地添加了不想由Git跟踪的文件
,或者想要取消暂存的一些更改,就可以使用git rm --cached
。这个命令将从Git索引
中删除文件,但保留它们在工作目录中
强烈建议大家一定要养成在项目初始化时就编写好.gitignore
文件的习惯!!!
转载自:https://juejin.cn/post/7262747607009099833