2010-01-02 83 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:///前缀)指定源回购来强制您期望的行为。

这是在文档中。