赞
踩
问题
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管理到的。
这个时候,提交的时候,就会忽略指定的目录了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。