# Git repository 架構規劃 我是建議將不同目的的功能分開放在不同的 repo,例如 server、client 分開放在各自的 repo。 優點: * 不需要相關功能的人無需 clone 相關的 repo * 做 CI 時速度會比較快且也省空間 缺點: * 要 clone 多個 repo * 可能要避免目錄結構錯誤 範例架構大概如下: ``` . +-- Designer.repo +-- Server.repo +-- Client.repo +-- ShareLibrary.repo ``` 如果有子 repo 的需求,有兩種解決方法,`submodule` 和 `subtree`。 * submodule: 如果不太會去更新對象 repo,建議可以採用這個,而且發展較早,Git GUI 軟體支援度比較高。 * subtree: 使用上跟一般 repo 沒有兩樣,但還是要另外將 commit push 到對象 repo,但使用上比 submodule 親民需多,但要注意還是有可能會遇到 conflict 的問題。但查了一下 Git GUI 軟體好像都還沒有支援的很完整,Fork 沒查到相關資訊,Sourcetree 測試過有支援。 ShareLibrary 如果 server 和 client 都會異動到的情況下,最好就拆開來放在獨立的 repo,如果要當做子 repo,就建議採用 subtree,但要評估 Git GUI 軟體是否支援。 如果一樣會將企劃 master data 檔案同時給 server 和 client,例如:OragneData.bin,因為這檔案 server 和 client 的開發人員並不會去異動,就建議用 `submodule` 的方式將 OrangeData.bin 拉進來,提供兩種架構如下: 如果 Git GUI 軟體可以完整提供 subtree 功能,就可以改用 subtree。 ### 1. Master data 檔案為獨立 repo 優點:Server depoly 和 client build 的時候,只會抓 data.bin 檔,不會包含其他不要的檔案。 缺點:企劃要同時 clone 兩個 repo,企劃資料轉檔的相對路徑也不能弄錯。 將企劃資料放在 MasterData.repo ``` . +-- Designer.repo +-- MasterData.repo | +-- data.bin +-- Server.repo | +-- MasterData (submodule) | +-- data.bin +-- Client.repo | +-- MasterData (submodule) | +-- data.bin ``` ### 2. Master data 檔案放在 Designer.repo 優點:企劃只要 clone 一個 repo,比較單純。 缺點:submodule 會連不需要的檔案一併抓進來。 ``` . +-- Designer.repo | + data.bin | + otherfiles +-- Server.repo | +-- Designer (submodule) | +-- data.bin | +-- otherfiles +-- Client.repo | +-- Designer (submodule) | +-- data.bin | +-- otherfiles ``` 將 master data 都各自放在 server 和 client repo 底下也可以,那就是在產生企劃資料時要注意彼此目錄的相對路徑。 其他類似 master data 的檔案,如果大多都是使用而不會去修改的話,也都可以規劃用 submodule 或 subtree 的方式來使用。 ## 其他工具研究 sparse-checkout 在 Git 2.25 之後得到了改善,本來要先把要下載的目錄或檔案先設定到設定檔,2.25 之後可以透過下的指令順序就可以只抓想要的目錄,簡化很多,是可以嘗試看看,但不確定 Git GUI 軟體的支援度如何。 ``` $ git clone <URL> --no-checkout <directory> $ cd <directory> $ git sparse-checkout init --cone $ git sparse-checkout set apps/my_app libs/my_lib $ git checkout $ git sparse-checkout list ``` Git 2.19 之後雖然可以透過 `sparse-checkout` 搭配 `Partial clone` 來做到只要 clone 指定的目錄,看起來還不錯,而且 Partial clone看起來有想要取代 Large File Storage 為目標的樣子。 但這東西還在實驗階段,要指定路徑的話,GitLab 要搭配 sparse-checkout 使用,GitHub 沒有實作這部份,目前看起來比較應用在針對檔案大小、減少檔案歷史為主。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up