idea bookmarks标记代码很方便下次能够快速调转到标记点,如图

 

 

 

!但是有一个严重的bug,在多模块git切换分支会触发该bug,当然可能设计上就不是为了多模块多分支设计的。

 

直接看解决方式直接跳转到:最终解决办法 

 

复现场景:

 

 

 

1:将my-common简写叫模块1,将sweet-util简写叫模块2 

2.1:模块1和模块2都创建新的分支“aaa”,然后都切换回master。

2.2:模块2随意标记一处bookmarks并命名为“master分支”

2.3:模块2切换到aaa分支,随意标记一处bookmarks并命名为“aaa分支”,然后模块1也切换到aaa分支。

2.4:后面的不太记得了,大概就是切换后并随意标记分支,最后会发现原来的标记被覆盖了。

 

原因:

标记bookmarks时,bookmarks数据存储在两处:

  1处:所有分支bookmarks存储位置:tasks目录(所有工作空间、分支的bookmarks存放位置): C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdea2021.1\tasks  对应工作空间的.contexts.zip包,zip内的文件以分支名命名的(最终导致被覆盖的原因就是这里,在多个模块下存在相同分支在切换分支标记时会导致覆盖)

 

  2处:当前工作空间bookmarks存储位置:workspace目录(该目录的数据由tasks目录加载过来的):C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdea2021.1\workspace,当tasks目录数据被覆盖,则这个目录的数据也会错乱。

 

  补充说明:

  当标记bookmarks时,数据会临时存储在idea内存,触发刷入硬盘条件:

    1:切换模块分支时:

       1.1:idea内存数据更新到“C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdea2021.1\tasks”目录下的zip包

       1.2:将tasks的zip包中对应“分支的配置”加载到idea内存中。

    2:关闭idea时:触发idea内存数据更新到“C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdea2021.1\workspace”目录

 

梳理:

  不知道idea官方是否知道该bug的存在,在使用过程中极度影响了使用,目前找过其他的一些代替插件,比如:“code notes”、“code remark(也有标签丢失情况)”,但是使用上原生的还是最便捷的。

 

初步尝试办法(经过多次测试得出“最终解决办法”,看下面):

  1:将“C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdea2021.1\tasks”和“C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdea2021.1\workspace”做数据备份,比如上传到github、gitee等,方便回滚(可以只对workspace文件夹做备份,该文件夹是记录当前工作空间标签数据,占用内存较小

  2:只在某一个分支上做标记,切换分支后不允许做标记,以防止被覆盖,所有模块切换回原来分支后再做标记。

 

最终解决办法:

1:删除“C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdeaxxxxxx\tasks”目录,并新建“tasks”文件,并设置访问权限全部拒绝(目的是为了禁用tasks目录),如下图所示。(如需恢复可用其他安全软件粉碎tasks重建目录

 

 

 

2:定期备份diea配置(经过测试,第一步解决了多模块多分支切换后导致的书签问题,但仍然存在书签丢失被清空的bug,暂未查明原因,所以最好备份下配置,以便还原丢失的书签)

将“C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdeaxxxxxx\workspace”文件夹上传到自己远程仓库。

(关闭idea后,只提交本地git,没必要每次保存到服务器。还可以设置windows自带的计划任务,定期每天执行cmd命令自动备份配置。)

 git提交命令,可以制作成一个cmd、bat文件。

set work_path=%~dp0

cd /d %work_path%

git commit -a -m '提交配置'

echo 执行完毕
pause

备份效果图:

 

 

备份方法:

  1:在远程仓库建一个项目,项目名随意,然后checkout到本地

  2:将本地checkout下来的目录更名为workspace,并替换掉idea原来的workspace。workspace文件复制过来。

 

posted on 2021-11-25 20:05  花开浪漫拾  阅读(2042)  评论(5编辑  收藏  举报