Vue工程使用git添加submodule公共庫的項目實踐
-
Vue的使用,一直在路上!
-
Git的使用,一直在路上!
-
Git submodule的使用,開始並將一直使用!(旨在解決多工程使用公共庫代碼的方式,且不必每個客戶端都包含該庫,亦可保持公共庫代碼提交的獨立性。)
一、 說明
- 假設submodule公共庫的gitlab地址:ssh://git@y:8080/submodule.git,且submodule公共庫已有公共代碼內容,此公共庫和項目工程代碼提交保持一致。
- 添加submodule公共庫均爲全量添加,即增加公共庫後submodule的內容會全部存在而非部分存在。
- 若在已有工程引入公共庫,且項目工程已包含公共庫內容,建議在使用公共庫前將項目工程內容和公共庫內容進行對比,以免更改後引入的無效或丟失項目工程內容。且建議:如非必要,儘量修改項目工程代碼。
- 若項目工程某功能分支已有多人在開發,建議管理人員統一引入submodulle公共庫後,各開發人員在clone已有submodule公共庫的代碼後再進行開發。(引入submodule公共庫所花費時間不長)
- 建議submodule公共庫和項目工程各分支名稱儘量保持一致,且對應關係一致。
- 以下內容涉及到submodule公共庫均簡稱公共庫。
二、 已有項目庫添加公共庫(以dev分支爲例)
- 添加公共庫(溫馨提示:修改之前請先覈對內容,確保不影響之前的內容及引用)
git submodule add -b dev ssh://git[@y](https://my.oschina.net/yyyy):8080/submodule.git src/components/lib
- git status查看改動
添加了.gitmodules文件和子模塊目錄文件。
- 將子模塊切換到dev分支
git submodule foreach git checkout dev
- 初始化並拉取遠端公共庫dev分支代碼
git submodule update --init
- 查看本地是否已經成功獲取公共代碼
cd src/components/lib
ls
- 項目工程有使用到公共庫代碼的地方,修改項目工程公共代碼的引用路徑,並刪除源文件。
- 啓動項目工程,測試是否可以正常運行。
npm run dev
- 提交改動
git add .
git commit -m ‘add submodule’
git push origin dev:dev
三、克隆已有公共庫的前端工程(以dev分支爲例)
1、克隆工程
git clone -b dev ssh://git[@y](https://my.oschina.net/yyyy):8080/project.git
- 初始化並下載子模塊
cd project
git submodule foreach git checkout dev
git submodule update --init --recursive
- 上述命令也可以合併爲以下命令
git clone --recurse-submodules git clone -b dev ssh://git[@y](https://my.oschina.net/yyyy):8080/project.git
- 啓動工程驗證
npm run dev
四、項目庫上獲取公共庫的修改(以dev分支爲例)
- 子模塊切換到正確分支
git submodule foreach git checkout dev
- 拉取公共庫代碼
git submodule update --remote --merge
- 查看狀態並提交更改
git status
git add .
git commit -m ‘change submodule commit id’
git push origin dev:dev
五、刪除公共庫
- 刪除項目庫根目錄/.gitmodules中對應的條目
- 刪除項目庫根目錄/.git/config中有關submodule對應的條目
- 刪除項目庫根目錄/.git/modules目錄下對應的submodule文件夾目錄
- 執行git rm --cached [modulename]命令,如本例中的git rm --cache src/components/lib
- 刪除submodule文件夾內容
六、使用公共庫的技巧
- 設置別名
git config alias.sdiff ‘!’”git diff && git submodule foreach ‘git diff’”
git config alias.spush ‘push --recurse-submodules=on-demand’
git config alias.supdate ‘submodule update --remote --merge’
- 常見問題
A. 問題:從有子模塊的分支切換到沒有子模塊的分支時,會帶過去一個未跟蹤的子模塊目錄
解決方式:刪除該目錄即可。
B. 問題:從無子模塊的分支切換回有子模塊的分支,子模塊目錄內容沒有了。
解決方式:git submodule update --init
重新填充。
C. 若更改過.gitmodules文件中的URL內容,項目庫執行git submodule update或git pull --recurese-submodules會失敗。
解決方式: git submodule sync --recursive //將新的URL複製到本地配置中
git submodule update --init --recursive //從新URL更新子模塊
七、官方文檔請戳 git submodule子模塊
小夥伴們,git submodule還在一直使用中,如有建議或疑問下方留言!希望能爲小白的你提供一點思路。加油!!!