我有一個包含多個Git子模塊的大項目。主項目使用不同庫的集合,一些庫使用庫本身。所有庫都可以獨立使用,所以它們都需要一個包含測試基礎設施(VUnit和UVVM)的子模塊。如何減少同一來源的多個子模塊的內存佔用?
Git的子模塊的樹是這個樣子:
ProjectA
o- libA
o- UVVM
o- VUnit
o- libB
o- UVVM
o- VUnit
o- libC
o- libA
o- UVVM
o- VUnit
o- UVVM
o- VUnit
o- libD
o- UVVM
o- VUnit
o- UVVM
o- VUnit
我有Git的內部數據庫和鏈接結構有一定的瞭解。因此子模塊的BLOB存儲在名爲modules
的目錄中的主存儲庫的.git
目錄中。它們通常具有與子模塊目錄名稱相同的符號名稱。
子模塊指向其數據庫主目錄,其中包含相對路徑的.git
文件。作爲回報,子模塊數據庫的配置文件指向子模塊的工作樹。
因此,所有UVVM子模塊都可能指向同一個數據庫,但數據庫如何指向多個工作樹?
我發現Git擴展可以與多個工作目錄一起工作,但它是否也適用於我的情況下的子模塊?
我也打開其他建議。
編輯1:
這是.git
目錄生成的內部結構。它爲每個UVVM和VUnit的子模塊重複創建全部對象存儲。
.git/
modules/
libA/
modules/
UVVM/
VUnit/
libB/
modules/
UVVM/
VUnit/
libC/
modules/
libA/
modules/
UVVM/
VUnit/
UVVM/
VUnit/
libD/
modules/
UVVM/
VUnit/
UVVM/
VUnit/
服務器上的內存佔用量非常低,因爲所有子模塊都指向同一個存儲庫。但是客戶端的內存佔用非常高。
在文件系統級別使用硬鏈接或重複數據刪除就足夠了嗎? –
我不確定Git如何執行文件操作。例如。與SVN它刪除並創建操作,而不是就地內容替換。這樣的操作破壞了硬鏈接。我還在尋找一種可以爲新用戶使用'git clone'的解決方案。我們正在一羣8名開發人員中工作,其中一些在Linux上的Windows上。 (順便說一句,Windows支持硬鏈接在NTFS :)) – Paebbels
我認爲這將有助於明確指出你正在尋找一個解決方案,幫助用戶的存儲庫,我認爲你只是在尋找一個服務器解決方案(裸倉庫在適當的文件系統上將是適當的)。據我所知,git使用很少更改的大塊文件。但是,您仍然對檢出的文件有重複。經常重新創建硬鏈接可能是必要的,也許這不是要走的路。 –