2013-02-11 71 views
2

我已經克隆了幾棵樹到我的本地磁盤中,並且從我的有限筆記本電腦磁盤中佔用了太多空間。與非分佈式版本控制(如SVN和CVS)不同,當您簽出git或Mercurial存儲庫時,您將獲得整個樹,包括整個歷史記錄,並且由於我很少向這些存儲庫提交任何代碼,但希望保持它們不變 - 到目前爲止,我發現這些分佈式版本控制系統浪費了太多的本地磁盤。如何在克隆git或hg存儲庫時節省磁盤使用量?

一些想法,我迄今爲消除這種浪費是:

  • 創建本地磁盤上的ZFS的btrfs或分區(可能是因爲我不想把它太執着循環文件系統) ,這應該更好地使用重複的文件塊。這可能需要太多CPU週期,導致效率低下。

  • 放棄使用版本控制並創建腳本來下載每天包含整個存儲庫的.zip文件。這將需要太多的帶寬,我寧願不這樣做。

我的最終解決辦法是使用git/HG在某種程度上就像我們使用SVN和CVS - 記錄歷史的服務器上,並在本地只有最先進的最新版本,或保留有限的歷史局部,都沒有打破所有其他事情,以便我可以看到日誌或將文件恢復到以前的版本,如果本地不可用,版本控制系統將從遠程獲取所需的信息。

+0

隨着硬盤驅動器降到0.04美元/ GB肯定這是不值得的時間。 :)減少網絡流量我完全理解。磁盤存儲,不是那麼多。 – 2013-02-11 22:17:37

回答

2

使用SVN你確實有2個全中,檢出版本的未壓縮副本(有每一個完整的副本.svn文件下來)。使用mercurial,您有1個完整的未壓縮版本的複製版和一個高度壓縮的二進制增量表示(向下在.hg/store)。在很多情況下(不同的文本文件),包含所有內容的hg克隆實際上會比單個版本的svn checkout更小。

我不認爲你的塊級重複數據刪除會有所幫助。 Mercurial和Git都使用非常高效的二進制增量,然後壓縮,在它們的存儲中幾乎不會留下冗餘信息,並且不會有塊對齊。

+0

我正在使用Mozilla存儲庫,大小約爲800MB,而.hg /存儲大小約爲1.1GB,並且包含歷史約15年的落後。 – 2013-02-11 21:27:36

+2

所以一個svn結帳將是1.6GB(800 + 800)和hg是1.9(800 + 1100),這似乎是正確的歷史。你不能在hg一側縮小它,而不改變歷史來使當前的克隆無效,我想這是一個不起眼的東西。但是,如果有一些未使用的大型分支未被合併,您可以通過有選擇地克隆使用'clone -r'的頭/分支來排除它們, – 2013-02-11 22:15:47

1

與Mercurial,你可以要求一個空的工作副本(僅克隆.hg文件夾):

hg clone -U <source> 

汞柱幫助克隆了更多的選擇。

我希望這會有所幫助。

2

從汞柱克隆幫助信息:

To pull only a subset of changesets, specify one or more revisions 
identifiers with -r/--rev or branches with -b/--branch. The resulting 
clone will contain only the specified changesets and their ancestors. 

您應該能夠使用HG的修改語法限制要得到多少修訂假設你需要的不僅僅是最新的多一點點。使用-r提示來獲取提示。

0

使用「hg share」。這將允許您只保留一個共享歷史記錄和多個修訂版作爲工作副本簽出。