为什么这个git浅克隆比我预期的要大?

时间:2010-01-02 19:44:57

标签: git

我有一个大约24MB的repo,但项目中的文件实际上只有2MB左右。我的印象是,使用--depth 1的浅层克隆几乎可以让我接近2MB的实际文件(没有整个回购)。

当我执行浅层克隆时,新的repo只显示当前分支但大小相同(24MB)并且使用gitx查看repo我可以看到整个历史记录回到初始提交。

我想要一种方法来获取文件的当前状态(用于上传到服务器)而没有所有历史记录。我做错了什么或只是误解了浅层克隆的目的?

4 个答案:

答案 0 :(得分:19)

如果这是一个本地克隆,那么克隆可能通过新存储库中的硬链接对象与旧存储库中的对象进行操作(它将此作为本地文件系统上的优化)。要查看是否是这种情况,您可以禁用硬链接:

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

如果您只想尝试将当前状态的文件上传到服务器,则应使用git archive生成树的ZIP或tar存档。

答案 1 :(得分:4)

我建议这是因为在进行本地克隆时,git会忽略--depth,因为它有利于硬链接。您可以通过使用file:///home/user/path/to/repo指定源回购来强制执行预期的行为(即使用文件:///前缀)。

这是在文档中。

答案 2 :(得分: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

答案 3 :(得分:0)

 git clone --depth 1 repo_url

应该做你想做的事。

也许您在repo url之后添加了选项?在某些系统上,它们会被忽略。