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文件復制過來。