Git Server 噴 git upload-pack: git-pack-objects died with error

Git-Logo-2Color

透過 Gitlab 架設 Git Server 來放一些 Document 資料,由於個人 Document 都是 pdf 檔案,所以整個 Git Repository 就非常肥大,今天在 Clone 下來的時候,不僅是主機 CPU 飆高,然後記憶體被吃到快沒了,最後還噴出底下錯誤訊息

remote: Counting objects: 4912, done.
remote: fatal: Out of memory, malloc failed
error: git upload-pack: git-pack-objects died with error.
fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed

網路上查到這篇 Git clone error + remote: fatal: Out of memory, malloc failed + error: git upload-pack: git-pack-objects died with error. 解法,裡面提到在每次 clone 專案時,Git 都會將資料壓縮並且存放到記憶體,所以如果 Repository 超過 100MB,你就會發現記憶體漸漸減少,然後整個炸掉,解法就是設定此 Repository 讓大家直接下載檔案,不要先丟到記憶體內,所以請打開 config 設定檔案,裡面寫入

[pack]
    window = 0
  • Will

    我覺得比較好的做法應該是設定 pack.windowMemory 的大小,而非把 window 設為 0,範例:

    [pack]
    windowMemory = 100m

  • appleboy48

    你這解法也可以,設定 100M 還是讓我遠端的機器 out of memory,所以我乾脆讓該 repo 不壓縮了,雖然會佔用硬碟空間,但是總比系統當掉好 XD

    參考:
    http://stackoverflow.com/questions/10292903/git-on-windows-out-of-memory-malloc-failed
    http://stackoverflow.com/questions/9040083/error-when-pulling-warning-suboptimal-pack-out-of-memory/9041551#9041551

  • LiangKuo

    設定windowMemory我也試過,也是爆。

    不過在設定 window = 0 之後還是 out of memory….且
    error: pack-objects died with strange error

    根據bitbucket上討論 git fsck 可解,不過我的還是不行,大概也是太多pdf,下次不把pdf加進去了。
    請問除了把index拿掉,有甚麼解法嗎?

    參考:
    https://bitbucket.org/site/master/issue/7467/error-pack-objects-died-with-strange-error

  • appleboy48

    話說我在 bitbucket 上使用沒這問題,但是轉移到自己架設的 Git 才出現此問題 XD

  • LiangKuo

    Orz 我還是擺著吧,當做一次教訓,不要把圖檔和pdf都紀錄,幾千個pdf是不可小覷的。(感謝你提供這方法,他讓我跑過了wirte object 那段,有人使用github 也遇到類似的問題,好像有提到重新clone,之後再push又好了…)

  • appleboy48

    不過我沒試過千個 pdf 大小,說不定也會遇到你說的狀況,話說圖檔或 pdf 這類型文件,還是擺在 Google Doc 或 Dropbox 會比較適合 XD