2010-06-06 91 views
1

使用Git或Mercurial,如果工作目錄爲1GB,則本地存儲庫將是另一個1GB(至少),通常駐留在同一個硬盤驅動器中。然後當推送到中央存儲庫時,會有另一個1GB。可以將Git或Mercurial設置爲繞過本地存儲庫並直接轉到中央存儲庫?

可以將Git或Mercurial設置爲僅使用工作目錄,然後使用中央存儲庫,而不需要此1GB數據的3個副本? (實際上,當中央存儲庫也是update時,那麼同樣的數據有4個副本......可以減少嗎?在SVN場景中,當有5個用戶時,那麼​​總共會有6GB的數據隨着分佈式版本控制,那麼就會出現數據的12GB)

更新:很奇怪 - 我只是想看看一個項目,我用水銀克隆:工作目錄不包括.hg文件夾是126MB,但.hg文件夾是239MB。這是一個新的克隆...是因爲我的新存儲庫實際上包含所有的歷史/修訂版本,所以這就是爲什麼它是工作目錄大小的兩倍?

+0

你的工作樹上有什麼?你認爲相信本地存儲庫至少和工作樹一樣大的證據是什麼? – 2010-06-06 10:47:26

+0

@Charles會被壓縮嗎?我的意思是,存儲庫實際上有工作目錄中每個文件的副本,只有壓縮? – 2010-06-06 10:50:06

+0

回答git,是的,高度壓縮。通常,對於具有合理歷史數量的「常規」源代碼存儲庫,打包的存儲庫大小可以顯着小於一個分支的檢出端。 – 2010-06-06 11:08:36

回答

3

Git或Mercurial是分佈式版本控制系統。這意味着每次結賬都包含項目的全部歷史記錄。繞過這將破壞使用DVCS的全部目的(每個操作都可以離線完成)。

但是一般來說Mercurial或者Git的壓縮比都非常高,即使存儲整個歷史,通常也比svn好。

0

hg clone在unix文件系統上創建硬鏈接,因此只有通過新更改集引入的更改纔會使用存儲空間。如果您不需要工作副本,則可以將回購更新爲「空」修訂版,該修訂版僅包含沒有工作副本的存儲庫。

Git也可以選擇裸存儲庫和共享存儲庫,但我從來沒有嘗試過它們。

+1

git clone也能夠使用硬鏈接,它被設計用於克隆unix上的本地存儲庫。參見手冊。 N.B>硬鏈接不跨越文件系統邊界(例如片/分區)。 – TerryP 2010-06-06 11:35:40

+0

hm,所以我嘗試了Windows 7,Git和Mercurial似乎都複製了文件,而不是使用任何鏈接......所以如果我只用一個文件克隆一個只有初始版本爲10MB的文件,新目錄將會有20MB。原始存儲庫也是20MB。 – 2010-06-06 13:27:40

+0

使用「-s」開關的git克隆只會引用原始存儲庫位置 - 但只有當存儲庫可以在本地訪問時才能使用。 – araqnid 2010-06-06 16:35:16

0

只要您擁有本地安裝並可訪問「中央」存儲庫的文件系統,就可以執行所要求的操作。

從cmd.exe的:

git --git-dir=Z:/path/to/git_repo_dir --work-tree=C:/path/to/checkout/root checkout master 

而且,只要你想,你可以儘可能多的檢出做到這一點,但它不是真正的理想。確實,git在Windows上並不像Linux那樣工作得很好 - 理想的解決方案是每個克隆都有硬鏈接到對象,所以它們只能物理存儲在磁盤上一次,然後每個克隆都可以被檢出到不同的分支,例如,您可以一次跟蹤開發/測試/生產。另外,就您對磁盤使用的擔憂而言 - 嘗試在您的某個存儲庫上執行git gc --aggressive --prune並查看它是否仍佔用大量空間。根據我的經驗,git非常適合僅存儲二進制增量 - 我已經通過將一個充滿MP3文件的目錄添加到一個存儲庫並提交它們,更改ID3標籤,然後提交更改,然後在運行git gc之前對此進行了測試顯然是.git文件夾中每個MP3的兩個副本,但是在git gc之後,大小回落到僅略大於原始工作目錄的大小。

相關問題