问题 git上传的时候,我们已经将 xxx 文件添加到了.gitignore 中,但是在push 后,远程仓库还是会显示此文件,比如我们在.gitignore文件当中添加了不需要提交的target目录,但是提交的时候,还是会被提交。

原因 xxx 文件在前面已经被 git 跟踪,在这之后再添加到 .gitignore 中是无效的。

比如如下: 我们在编写玩某些业务代码之后,对代码进行提交,发现target目录也出现在提交的目录当中: 这个时候,我们将target目录添加到.gitignore文件当中,如下: 也将.gitignore文件添加到git管理当中 这个时候,我们在对代码进行提交,发现target目录还是会在提交目录当中,我们明明给target目录添加到忽略文件当中,那么为什么还是会存在呢?

原因分析:

.gitignore按照它的用途来说,肯定是生效的,但为什么会出现这种情况呢?

原来它只是对从来没有追踪过的文件生效,如果是项目后期加的,也就是说要排除的文件已经被纳入到版本管理中了,

那这个时候直接添加是不会起作用的,如果要生效,还需要做些额外的处理,也就是说我们在.gitignore文件当中添加要忽略提交的

target目录的时候,target目录其实已经被git纳入到版本管理中了。

解决途径:

进入项目目录,执行如下命令:

git ls-files

查看暂存区的全部文件,也就是git追踪的文件列表

git rm -r --cached xxx

xxx表示要从暂存区删除的文件,如git rm -r --cached target/* .idea/*,执行后,对应的文件将处于未跟踪状态,.表示删除所有文件,

注意:在执行命令的之前,有一个非常重要的操作就是,必须保证将本地所有的代码已经提交到git上了,也就是说没有修改任何的代码文件的前提下,才能执行命令。否则执行报错 这里我们最好重新打开一个终端,再执行命令,再一个就是最好明确删除哪一个目录下的文件,我这里删除的是demo01目录下的所有文件,我们最好明确指定要删除target目录 比如:

git rm -r --cached ./xxx/target/*

如果删除某个文件 报以下错误,那么我们就使用强制删除命令

git rm -f --cached 某个文件

查看未追踪的文件,进一步可以验证在上一步操作后是否已生效 (此时,可再次刷新commit窗口查看文件变化)

再次提交就会发现没有了target目录了,因为我们在.gitignore文件当中添加了忽略提交,注意不要再一次将target目录add添加到git的管理范围当中了。

另外,我这里还有.idea目录下的文件并没有排除在git的管理之外,为什么提交的时候,没有出现在提交列表之内呢? 因为我们IDEA当中进行了.idea目录忽略,这里配置的忽略目录或者文件将在git提交的时候全部忽略提交, 但是并不建议在此次配置所有要忽略提交的目录或者文件,因为这里配置的忽略目录和文件,在IDEA的工作目录界面,也不会显示出来,如果我们在此次也配置了target目录,那么我们在IDEA工作目录界面看不到每次工程是否成功进行了编译出来了target目录,所以我只配置了忽略.idea目录

还有一种可以情况就是,当我们刚刚创建项目,没有任何的代码提交的时候,这个时候我们就在.gitignore文件当中添加了忽略提交目录也是可以的,因为没有任何的代码文件是被git管理到的。 这个时候,提交的时候,就会忽略指定的目录了

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: