因為工作關係,最近常使用 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 的路徑}