2015-12-09 44 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

相關問題