使用submodule管理git子專案
使用Git來管理程式版本,身為開發者一定不陌生。在Magento專案裡,如果遇上原生不支援的功能,我們會自己開發模組,如果這個模組被設計可通用於不同專案,那麼集中一個地方去開發,肯定是較好的維護方式。今天要跟大家分享git本身即有功能可達到此目的,透過submodule的建立,一個模組專案,可以被安裝在不同Magento專案之下,一旦模組有更新異動,各專案可自行同步到最新程式,一起來看看吧!
假設我們現在有個Magento專案,另外備有已開發可被使用的的模組專案
Magento專案: DemoProject
模組專案: TaiwanInvoice
首先,在主專案下, 透過git指令將模組專案加到其submodule
git submodule add <模組專案git url> <主專案下的目錄位置>
接著查看submodule狀態,可以看出目前已加入該子專案
git submodule status
查看主專案狀態,會得到提示說有尚未commit的異動
git status
接著正常執行commit,並上推至主專案遠端
查看github上主專案的commit,對照模組的commit,可以觀察出實際作法是在主專站的commit中,紀錄對應到子專案的commit hash。
現在要為此專案修改模組的內容,先進到模組資料夾 app/code/AstralWeb/TaiwanInvoice/
注意在這裏所下的git指令是針對子專案,也就是說,直接在這個資料夾裡修改後即可commit上推到模組遠端。這裏我們要為此專案做一個特殊版本,因此另開分支 demo_project
簡單的修改README.md後上推到遠端
接著往上查看主專案狀態,得知模組有異動
要注意的是,剛剛我們變更了submodule所使用分支,因此現在需要更新這個資訊,需修改 .gitmodules 內容
接著一樣commit上推到遠端
觀察github上的主專案的 commit,一樣是紀錄了模組那頭對應的hash,這樣一來,就可以很清楚知道主專案裡對於的子專案異動,是在哪個commit了。
到這裡我們都是在主專案裡異動,如果這個模組在他處被更新呢?我們先在別的地方為demo_project 分支再上一個commit。
接著在主專案裡下指令,進行submodule的更新
git submodule update –recursive –remote
查看狀態,可知子專案有新的commit
一樣直接主專案commit上推遠端即可
以上就是創建與更新的步驟,接著來看初始化的方式
現在主專案已經有了子專案,假設重新在別的地方下載專案
查看submodule狀態,確實有紀錄
但子專案資料夾 app/code/AstralWeb/TaiwanInvoice/ 裡卻沒有東西
這時需要下初始化指令,再進行更新
git submodule init
git submodule update –recursive –remote
這樣檔案就下載成功囉!
最後就是子專案的解除方法
首先,刪除submodule的紀錄
git submodule deinit -f <子專案資料夾路徑>
接著刪除子專案的.git資訊
rm -rf .git/modules/<子專案資料夾路徑>
刪除實體檔案
最後一步commit上推遠端!
以上就是使用git submodule的方式,各位不妨利用它集中管理Magento開發使用的共通模組,除了submodule,我們也可以將模組獨立成一個git專案,選擇透過composer的方式去安裝,只是這種方式,在發布與異動上,可能不及submodule來得直接與便利
希望今天的分享幫助到大家更有效的管理專案,我們下次見囉!
如果有您有更多疑問可以詢問我們,未來會撰寫更多電商網站相關文章,您想知道什麼嗎?歡迎在下方留言給我們。或追蹤我們的粉絲專頁及IG,也別忘了訂閱電子報,就不錯過最新文章喔!
想學習更多Magento設定嗎?請見:Magento教學導覽
我要留言