1.情景展示
如上图所示,git项目在本地提交的时候,会多出很多无用的文件。
明明.gitignore文件当中有,或者.gitignore刚开始没有,我们把需要过滤掉(不需要提交)的文件增加了进去,但是却不生效。
怎么办?
2.具体分析
.gitignore 只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
由于新创建的文件已经出现在git本地仓库的缓存,所以.gitignore就失效了。
解决办法就是:清空一下git仓库的缓存,重新提交一次就好了。
3.解决方案
保险起见,进行如下操作步骤时,我们可以先做好以下准备:
第一,把本地仓库更新成最新内容;
第二,将本地代码提交到远程仓库。
第三,新建一个本地分支,这样即使操作失误,对远程仓库也基本上没有影响。
说明:
运行git命令有两种方式,一种是在idea当中运行,另一种是通过git操作窗口运行。
在idea当中操作,经常会报错,不推荐使用。
在idea当中运行git命令(不推荐使用)
在idea当中,打开Terminal命令窗口,分步骤执行以下操作即可。
第一步:先把暂存区的文件删除(改变成未被追踪状态)。
git rm -r --cached .
等待执行结束,项目当中所有文件,将被从本地仓库缓存区移除。
所有文件的状态,都将变成:新增文件且未提交状态。
第二步:本地添加或者修改正确的.gitignore文件。
示例
#忽略所有target目录
target/
#忽略行尾结束符变化(CRLF与LF)
.gitattributes
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### Eclipse ###
.classpath
.project
.settings
#日志
*.log
第三步:添加本地所有要提交的文件。
git add .
如果不出意外的话,所有文件将会被添加到本地仓库当中。
如出现上述报错信息:
warning: LF will be replaced by CRLF in dc/assembly/dc-boot/target/maven-status/maven-compiler-plugin/compile/java-compile/createdFiles.lst.
The file will have its original line endings in your working directory
解决办法如下:
git config --global core.autocrlf false
在Terminal命令窗口输入以上命令,按Enter键回车运行。
再次执行git add .命令。
命令执行结束,所有文件,都将变成已修改状态。
第三步:提交更新后的.gitignore文件。
git commit -m 'update .gitignore'
正常情况下,运行此命令是没有问题的。
如出现以上错误:
error: pathspec '.gitignore'' did not match any file(s) known to git
解决办法如下:
通过git-bash.exe运行git命令(推荐使用)
找到本地git的安装目录,双击运行git-bash.exe。
切换到此项目所在目录。
说明:路径不能使用反斜杠\。
错误示例:D:\workspace-idea\dc
正确示例:cd d:/workspace-idea/dc
重复上述操作步骤。
第一步就报错,这意思是:.gitignore文件已经被放进缓存区,需要强制移除。
用以下命令代替:
git rm -r -f --cached .
执行第二步。
执行第三步。
等待操作结束即可。(会展示更新多少个文件,新增多少,删除多少)
此时,返回idea。
选中当前项目名,点击提交,来到提交视图。
这次,本地将再无需要提交的文件了(真清爽!)。
说明:
给.gitignore文件新增内容时,通常需要过滤的文件内容已经被纳入到版本管理当中。
所以说,一般情况下,当我们需要新增过滤条件时,就会需要重述上述操作步骤。