2015-12-09 46 views
6

我刚刚创建了一个新的存储库并创建了初始提交。为什么我的Git仓库比工作目录大得多?

工作目录为2 GB。但.git目录高达15 GB。

为什么git仓库只有一次提交,几乎是工作目录的8倍?

我做错了什么?有没有什么办法解决这一问题?

+1

尝试运行'git gc'(运行'git gc --help'来查看这意味着什么)。我不会发布这个答案,因为我不知道你的回购为什么如此之大,但'git gc' * *可能会有所帮助。 –

+0

这确实很奇怪。您是否可能会将一些文件添加到暂存区域,但在提交之前将其删除? – Nayuki

+0

你是如何创建这个新的存储库的?看起来你有一些历史被存储在那里。重要:你使用'git clone'还是'git init'? –

回答

7

大的存储库大小是因为您暂时添加了“.hg”子目录的内容,但没有在实际的初始提交中使用数据。让我们追溯一步发生了什么步骤:

  1. git init:创建元数据的一小有点“git的”子目录。

  2. git add .:这将所有的工作树都复制到Git的索引(a.k.a.暂存区) - 换句话说就是项目中的所有文件,包括所有“.hg”目录文件。当我们说这些已被添加到索引中时,这意味着所有文件内容都已添加到“.git/objects”中的对象存储数据库中,并且“.git/index”文件具有指向所有文件的指针。

  3. git reset .hg:这会从索引中删除“.hg”子目录。但是已经添加到存储的对象不会被删除,因为其他提交或索引条目可能已指向它们。 (GIT目前不跟踪有多少引用指向一个对象这与追踪垃圾收集工作,而不是引用计数。)

  4. git commit:这是你最后执行的命令,该命令复制索引到一个新的提交和将其存储到存储库中。

为了解决你的问题:

  • 可避免文件膨胀摆在首位,如果你开始一个空白的存储库和只添加你需要的文件,仔细排除”。汞”。

  • 如果您想在事后修复问题,则可以运行git gc并希望未使用的对象被删除。

+1

我最终用来解决问题的解决方案是使用file://协议来克隆存储库。 – PortMan

相关问题