likes
comments
collection
share

Git 之 .gitignore 不生效

作者站长头像
站长
· 阅读数 8

引言

有时候太顺了也不是一件好事,有时候不从头自己做一遍你也永远不会发现自己知识的薄弱点

最近,遇到了一件比较有趣的事,事情的经过是这样的:.gitignore已经忽略了build.gradle文件夹下的内容,但是IDEA编译后还是会在控制台追踪这两文件夹下的变化

历程

首先,这是第一次遇到这种情况,第一反应便是:怎么可能?明明已经在.gitignore添加了build.gradle这两文件夹了呀,这绝对不可能,思考了一会儿,我觉得应该是电脑的问题,重启一下可能就好了?

然后,结果当然不是我意料之中那般,在我编译代码后,build.gradle文件夹下的内容还是会被追踪到,就像下图这样生成一大坨完全看不懂、用不到的文件,而更可气的是它还给我追踪到并展示出来,这让我去找需要提交的那一个变更文件显得有些费时(是的,改一个文件,编译生成一坨,然后去找改的那个)

Git 之 .gitignore 不生效

当然,在我还不知道为何会造成这种情况之前,我也不能如此毫无效率的在一大堆文件里去找我需要的那一个文件呀,这样太耗时了,因此这里我自己给自己提供了两种解决方法:

  • 指令提交,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文件的习惯!!!