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文件复制过来。