2011-04-10 122 views
78

我目前的底座總大小約爲。 200MB。如何縮小.git文件夾

但我的.git文件夾具有驚人的5GB(!)大小。因爲我把我的工作推到了外部服務器上,所以我不需要任何大的本地歷史記錄...

我該如何縮小.git文件夾來釋放筆記本上的一些空間?我可以刪除比30天更早的所有更改嗎?

非常感謝您的幫助:)

+1

你可以張貼'混帳的輸出計算對象-v'? – 2011-04-10 17:42:16

+0

[Reduce git repository size]可能的重複(http://stackoverflow.com/questions/2116778/reduce-git-repository-size) – sds 2017-02-23 22:37:55

回答

56

你不應該刪除所有變更超過30天的(我認爲這是可能以某種方式利用git的,但真的不推薦)。

你可以調用git gc --aggressive --prune,它會在你的倉庫中執行垃圾回收並修剪舊對象。你有很多二進制文件(檔案,圖像,可執行文件)經常改變嗎?這些通常會導致巨大的.git文件夾(請記住,每個修訂版和二進制文件的git存儲快照壓縮很糟糕)

+13

其實'git gc --aggressive'被認爲是不好的做法。最好使用'git repack -a -d --depth = 250 --window = 250'。 – Artefact2 2011-04-10 17:26:00

+0

@ artefact2:是嗎? git gc打電話內部重新包裝,所以我不同意你的看法。你有鏈接來備份你的聲明嗎? – knittl 2011-04-10 17:38:11

+0

這是一個包含大量php,js,css,當然還有圖片的webproject :)我要運行git gc --aggressive --prue – JMW 2011-04-10 17:52:56

7

5GB vs 200MB有點奇怪。嘗試運行git gc

但是否,除非將存儲庫拆分爲模塊,否則不能減小.git目錄的大小。

git repo的每個克隆都是一個完整的存儲庫,可以充當服務器。這是分佈式版本控制的基本原則。

3

我使用git作爲同步機制而不是版本歷史記錄。所以我對這個問題的解決方法是確保我所有的當前資源都處於令人滿意的狀態,然後刪除.git並重新初始化回購。磁盤空間問題解決了。 :-)歷史消失了:-( 我這樣做是因爲我的回購是在一個小的USB密鑰上,我不想或者不需要我的全部歷史記錄 如果我有一個截斷歷史記錄的方法,我會使用它。

如果我有興趣讓我的過往,我將會存檔當前存儲庫。 在某一點後,我能克隆原來的倉庫,在所有的變化複製從 新的回購協議(假設我沒有做過多少(任何)重命名或刪除)。然後做一個 大提交,將代表在新回購作出的所有更改作爲 舊repo中的單個提交。是否可以合併歷史嗎?也許如果我使用分支然後 刪除了我沒有的對象需要。 (我沒有足夠的瞭解git內部的東西,開始像那樣開玩笑)。

35

Linus

相當於 「混帳GC --aggressive」 - 但做* *正確 - 是 做(過夜)類似

git repack -a -d --depth=250 --window=250 

其中該深度的事情只是關於三角洲鏈可以有多深 (讓他們更長的舊歷史 - 這是值得的空間開銷),和 窗口的事情是關於我們希望有多大的對象窗口每個增量 候選人掃描。

在這裏,你可能會想添加了「-f」標誌(這是「刪除所有 老增量」,因爲你現在實際上是想確保這個 竟發現好的候選人。

來源:http://gcc.gnu.org/ml/gcc/2007-12/msg00165.html

+0

對我而言,.git文件夾大概是1.5G。我試過這個,但是我得到了followng錯誤。 'fatal:內存不足,malloc失敗(嘗試分配39763130字節)' – Miron 2017-03-29 04:18:46

+0

在本地執行'repack',執行commit和push操作後,是否也會將收縮變爲遠程? – Timo 2018-01-06 11:58:40

12

我嘗試了這些,但我的倉庫仍然是非常大的問題是我不小心簽入一些產生大的文件經過一番搜索,我發現一個偉大的教程,可以很容易地刪除。大的生成文件,本教程允許我從60開始縮減我的存儲庫MB到< 1 MB。

http://stevelorek.com/how-to-shrink-a-git-repository.html

+2

這一個幫助了所有這些技術中最多的。謝謝! – Gregory 2015-03-18 02:32:46