引言
到目前为止,STS已经闪退过三次了。
问题很棘手,我需要冷静。
首先出现了一个问题就是,EGit无法commit。
第二个问题是切换分支报错。
闪退重启后EGit无法提交代码
观察闪退出现的时机,一般出现在我 commit 代码的时候,只要点击commit,STS就会以迅雷不及掩耳之势自动退出,猝不及防!
重启后,代码无法提交!!WTF!
问题出现在 index.lock 文件上。
index.lock文件是在进行某些比较费时的git操作时自动生成的,操作结束后会自动删除,相当于一个锁定文件,大小为0KB。它的目的在于防止对一个目录同时进行多个操作。有时强制关闭进行中的 git 操作,这个文件没有被自动删除,之后你就无法进行其他操作,必须手动删除。这个文件位置在项目的 .git文件夹中。
闪退重启后,手动删除这个文件,确实可以解决代码无法提交的问题。
闪退重启后切换分支出错
这个问题比较吓人。大有想把整个项目干掉重新pull的冲动。
现象描述:闪退重启之后,从目前正在工作的 feature(新功能)分支上切换回dev分支,但是当点击 switch branch 的时候,在EGit Git Staging 视图的 Unstaged Changes 区域突然涌现出大量未同步文件 !!!且当前分支也并未切换回dev分支,同时弹出错误提示框————"Check out branch encounter a problem !"
经过仔细观察,Unstaged Changes区域的文件都是dev分支上的文件,也就是说,整个项目的文件内容实际上已经是dev分支的内容了,但是由于前面闪退的原因,此时的切换操作EGit并没有把 HEAD指针 真正切换到dev分支上,还是停留在feature分支上,才会出现好似 “dev分支上的文件还没有在feature分支上提交” 的奇怪现象。
在错误提示框的Detail一栏,始终显示 :Couldn't rename .../.../.../LOG_FILE_IS_UNDEFINED ... to ... (由于问题已经解决,因此没来得及截图,总之大意就是这个)
问题并没有比较靠谱的解释。
但我的解决方案是:将LOG_FILE_IS_UNDEFINED 文件重命名之后再重启Eclipse ,有时候系统会提示这个文件被占用,先将Java SE 服务停掉,然后将LOG_FILE_IS_UNDEFINED随便改个名称(可以加个后缀.bak),再重启Eclipse即可。
在Stack Overflow上搜索到类似的问题,但解决方案貌似并不管用。
不过,问题貌似出现在 rename 分支。这倒也可以解释为什么切换分支时文件系统中的实际内容已经是另一个分支上,而branch name却并未切换的现象。
总结
1、删除项目所在目录下的 .git 文件夹中的index.lock 文件;
2、重命名主项目下的LOG_PATH_IS_UNDEFINED 文件,或删除。
希望有了解这个问题的小伙伴,下方留言哦,非常感谢。:)