簡體   English   中英

服務器上的Git存儲庫比具有所有分支的本地克隆大得多

[英]Git repository on server is much bigger than local clone with all branches

我們目前面臨一種奇怪的情況,即服務器上只有65MB的本地克隆存儲庫(GitBlit,但這無關緊要)12 GB的大小。 我嘗試了不同的想法,這里可能會出錯,這里是列表:

  • 為服務器上的每個分支完成git ls-tree -r -t -l --full-name HEAD > stats.txt ,並收集該信息。
  • 使用cut -c53-60 <filename> | grep -v '-' | awk '{ sum += $1 } END { print sum }'分析結果 cut -c53-60 <filename> | grep -v '-' | awk '{ sum += $1 } END { print sum }' cut -c53-60 <filename> | grep -v '-' | awk '{ sum += $1 } END { print sum }'總結了所有提交的所有文件大小。
  • 結果我們得到~150 MB

所以我們沒有找到任何提交大文件的提交。

我的本地目錄.git/objects/pack有一個目前為17MB的包文件(在GC之后,它是21MB之前)。 服務器上的包文件當前大小為12 GB。

我以正常方式克隆了存儲庫: git clone https://myserver.mycompancy.com/gitblit/r/projectID/projectID.git並獲得了本地副本。 可以肯定的是,我已經完成了git fetch --all而沒有改變。

那么我們怎樣才能找到服務器上的包文件更大的原因呢? GitBlit有一個自動GC運行,可以打包超過7天的松散物體。


更新:我在我的本地克隆和服務器上按照建議執行了命令git verify-pack -v ,這里是結果(僅作為統計信息):

  • 結果線
    • 當地:60,156
    • 服務器:16,456,844

因此,服務器上的包文件的幅度(~270倍)更長,這就解釋了包中的差異。 下一步要找到更多線路的原因應該是什么? 統計的某些方面更有趣嗎?

在GitHub上查看我的問題。 以下是我們所做的總結:

  • 我們已經看到服務器倉庫比客戶端倉庫大得多(> 270次)。
  • 我們通過命令git verify-pack -v得到了一些關於pack文件的詳細信息(這就是服務器repo更大的原因)(感謝@ max360)。
  • 單獨的結果文件的大小(類似於包文件本身的大小向我們顯示索引中包含更多的對象。
  • 我們不知道原因,我們曾經認為GitBlit會自動降低它(它沒有'),但是在git gc --prune --agressive ,前12 GB包文件縮小到~110 MB大小。

我們不知道出了什么問題,導致存儲庫膨脹,但至少我們找到了一種方法來再次收縮它。

@James Moger在GitHub票證中解釋說,在GitBlit上執行GC是一個實驗性功能,並且因為使用JGit而不是Git二進制文件,GitBlit完成的GC的結果可能與上面的git gc命令不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM