idea favorites bookmarks标签收藏夹数据丢失bug


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时,数据存储在:

  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:(可选,该最终解决办法初步校验可行,但建议备份一下配置,后面确认无误再移除)将“C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdeaxxxxxx\workspace”文件夹上传到自己远程仓库(后面每次关闭idea后,只提交本地,没必要每次保存到服务器)。

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

set work_path=%~dp0

cd /d %work_path%

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

echo 执行完毕
pause