除了git strategy,管理repo也有策略可以學習,使用得當對我們的開發部屬上面也會有幫助,那麼我們就來了解一下吧!
總共有三種模式,monolith,multi-repo,mono-repo
monolith就是把所有專案都放在同一個git repo裡面,如果是小專案或是專案初期推薦用這種方式。
這是一個簡單方便的方法,特別是在產品開發初期或非大型專案,因為所有東西放在一起,很容易尋找以及構築。
然而,當團隊和產品不斷擴張時,這個repo會變得非常龐大,導致打包和部署時間變長,效率也變低。
當有人想要提交某個功能時,會觸發一次CI,因為一堆產品可能都包在這repo裡面,會導致跑CI的時間非常久,非常的耗時。並且管理上會越來越複雜,如果專案還想要用不同的技術開發,放同一個repo可能會造成衝突。
當東西一多,就像是兔子窩一樣,挖出來一群一群的小兔子,部屬效率會降低。
Multi-Repo(或稱 Polyrepo、Many-repo)是指將個別功能放在不同repo底下,同時也能擁有各自的環境和工具的設定檔與技術。
每一個repo都擁有自己的git,有點像是一個大資料夾放了很多的git repo。
由此看來,使用 Multi-Repo帶來的優點是專案體積小、高效率開發、技術獨立、相依管理簡單、高彈性,因此權責切分乾淨、不同框架時更顯優點。
我們可以在不同的專案採取不同的語言開發,更具有彈性,因為每個repo都是一個git repo。
但它還是有缺點的,如果要CICD,代表每一個repo都要弄,感覺是蠻麻煩的QQ 而且發生bug的時候,我們會難以找到,到底是哪一個repo,哪一個版本造成的錯誤,如果出錯在自己的repo很好找,牽扯到其他repo就非常難debug。
mono-repo將個別功能放在同一repo的不同package底下,跟Multti-repo有一點不一樣,它是全部package都是同一個git repo,這麼做的優點是
而且它因為都在同一個git repo裡面,那麼它可以追蹤到這些code的細節(git blame!?),如果發生問題,要追蹤相對比較容易,總比看超多個git repo方便(?
它還是有缺點的,因為每個人都可以訪問內部的程式碼,是不是有可能會有安全性的顧慮? 代表我們要做好權限的控管。
同樣地,也會面臨到single repo的缺點,當專案越來越大時,是不是管理起來會很複雜,git的效率會降低。
我們選用哪種repo架構的時候,就可以考慮這些點,我們的團隊大嗎? 如果只是小團隊,是不是採用mono repo或Monolith 就可以了。
我們的專案大小如何? 如果太大的專案,是不是該採用multi repo?,如果想要用權限控管,是不是不能用monorepo?,是否想要共用資源? build code的速度等等,這些都是我們選用某一種架構考量的點,目前大公司都有採用mutlit repo還有mono repo,因此可以安心服用。
https://codefresh.io/blog/using-codefresh-with-mono-repos/