2010-01-02 86 views
11

我有一個大約24MB的回購,但項目中的文件實際上只有2MB左右。我的印象是,帶有--depth 1的淺克隆會使我接近實際文件的2MB(無整個回購)。爲什麼這個git淺克隆比我預期的更大?

當我做淺層克隆時,新的回購僅顯示當前分支,但大小相同(24MB),並使用gitx查看回購,我可以看到整個歷史回溯到初始提交。

我想要一種方法來獲取文件的當前狀態(用於上傳到服務器)沒有所有的歷史。我做錯了什麼或者誤解了淺層克隆的目的?

+0

你使用的是什麼版本的Git或msysgit?因爲這個線程(http://osdir.com/ml/git/2009-02/msg02816.html)說:沒有回購。 – VonC 2010-01-02 20:00:53

+0

我在雪豹上使用1.6.5(來自二進制包)。 – kjs3 2010-01-02 20:12:20

+0

克隆是本地btw。 – kjs3 2010-01-02 20:15:40

回答

20

如果這是一個本地克隆,那麼克隆可能是操作通過將新存儲庫中的對象硬鏈接到舊存儲庫中的對象(它將其作爲本地文件系統的優化)。要看到,如果是這樣的話,你可以禁用硬鏈接:

git clone --depth 1 --no-hardlinks /path/to/repo.git 

如果你只是想獲得文件的當前狀態,上傳到服務器,你應該使用git archive生成一個ZIP或焦油你的樹的檔案。

+1

--no-hardlinks選項似乎沒有什麼區別,但「git archive」是完美的。 謝謝 – kjs3 2010-01-02 23:18:42

0
git clone --depth 1 repo_url 

應該做你想做的。

也許你把選項後repo url?在某些系統上,他們會被忽略。

+0

我在URL之前有選項。沒有骰子。 – kjs3 2010-01-02 20:12:53

+0

您應該在嘗試發佈答案之前閱讀該問題。 – mpowered 2014-04-30 20:00:27

1

正如在評論中所說,這很奇怪,因爲通常不可複製(見this thread)。命令

例,應該工作:

$ git clone --depth 1 git://github.com/rails/rails.git shallow 
Initialized empty Git repository in /home/me/shallow/.git/ 

但無論如何,在大型回購協議,以淺克隆獲得的增益seems not very impressive

4

我建議這是因爲當做一個本地克隆,git忽略--depth,因爲它有利於硬鏈接。您可以使用file:///home/user/path/to/repo(即使用file:///前綴)指定源回購來強制您期望的行爲。

這是在文檔中。