欣迪

因為工作關係,最近常使用 protobuf 串接協議。

多個專案使用同一個協議的狀態下,有可能會發生以下的情形。例如 B 專案是由 A 專案複製去產生。對應的 protobuf 專案是同一個。

一但 protobuf 的 submodule 協議有所修改,我們就必須同時在兩個專案做以下指令:

# 1. 同步遠端的 submodule
git submodule update --recursive --remote

# 2. 產生前端可用的 protobuf js 檔,以 protobufjs module 為例
pbjs --dependency protobufjs/minimal.js --target static-module --wrap commonjs --out pathoTOoutput/proto.js sourceSubmodulePath/*.proto sourceSubmodulePath/**/*.proto 

此時, 會發現 B 專案在執行這些指令後,毫無反應。

這是因為 B 專案在複製的同時,也許並未複製 .git 資料夾內的內容。或是重來沒有執行過同步 submodule 的指令。

解方法如下,先確認 .git 資料夾裡面有沒有 mdoules 這個資料夾。並查看裡面的內容,如果有,而且也包含這次更新的 submodle,可已試試看手動更新 submodule,指令如下:

cd {submodule 的路徑}
git reset --hard origin/master
cd -
git submodule update --init --recursive

如果沒有 modules 資料夾,或是上述方式無效,可以試試看以下處置方式,暴力移除再暴力安裝。

# 刪掉目前 submodules 的配置
git submodule deinit {submodule 的路徑}
git rm -f {submodule 的路徑}
rm -rf .git/modules/{submodule 的路徑}

# 重新加回 submodules
git submodule add --force { Submolue 的 git url } {submodule 的路徑}

訂閱 IT-Monk

訂閱最新文章的發布消息! 😚😚😚
Loading

作者介紹 - 欣迪

欣迪

從設計到寫程式,發現自己有追求前端技巧的自虐傾向。不斷的踩坑,再從坑裡爬出來,慢慢對攀岩有點心得。 目前在多間公司擔任網站設計顧問。 同時也是網站架設公司負責人。