簡體   English   中英

如何減少 Bitbucket 上的 git repo 大小?

[英]How to reduce git repo size on Bitbucket?

我的問題摘要:在向兩個現有文件添加幾百個字節后,我在 Bitbucket 上的一個私人存儲庫的大小突然增加了一倍多。 存儲庫現在超過 2GB,這導致 Bitbucket 將其置於只讀模式。 因為它處於只讀模式,所以我無法推送會減少 repo 大小的更改。 (第 22 條。)

詳細信息:我的公司最近開始在 Bitbucket 上托管 git 存儲庫。 我負責的其中一個存儲庫的大小約為 973MB,令人不安地接近 1GB 的軟限制。 為了減少存儲庫的大小,我按照 Bitbucket 文檔文章將存儲庫分成兩部分中的說明操作,並將價值約 450MB 的文檔和在線幫助文​​件移動到他們自己的私有存儲庫中。 然后我按照 Bitbucket 文檔文章Reduce repository sizeMaintaining a git repository 中的說明進行操作,特別是:

git count-objects -vH向我展示了一個大約 973MB 的大小包。

我運行git filter-branch --index-filter 'git rm --cached --ignore-unmatch doc' HEAD來刪除 doc 目錄(這是我移動到新倉庫的內容)。

我運行了以下命令來使引用過期和修剪:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --prune=now

git count-objects -vH然后向我展示了一個 881.1 MiB 的大小包, du -sh .git/objects返回了 882M。 我很失望移動超過 450MB 將 repo 大小減少了不到 90MB,但仍然將更改推送到 Bitbucket:

git push --all --force
git push --tags --force

該存儲庫的 Bitbucket 副本的設置頁面繼續顯示 973MB 的大小。 我注銷,刷新瀏覽器,重新登錄,但這沒有幫助——repo 大小保持在 973MB。

今天早上(上述更改三天后)我對兩個現有文件進行了一些小添加,將文件的大小總共增加了不到 1KB,將它們添加並提交到我的本地存儲庫,然后將更改推送到比特桶。 幾分鍾后,我查看了該存儲庫的 Bitbucket 頁面,看到一個紅色警告橫幅,通知我“此存儲庫超過 2 GB 限制並且處於只讀模式。” 設置頁面現在顯示 repo 的大小為 2.3 GB。

根據 Bitbucket 的說法,向兩個文件添加幾百字節的推送絕對是過去三天在遠程存儲庫上發生的唯一活動。 這種推動可能不是回購規模增加一倍以上的原因,但這兩個事件在時間上密切相關。

git reflog show返回任何內容。

將新副本克隆到備用目錄中,然后運行 ​​git count-objects 會得到 881.29 MiB 的大小包。

本地存儲庫位於 CentOS 6.5 系統上。 git 版本是 1.8.5.3。

問題

  1. 為什么將 450MB 的文件移出 repo 只會將我的本地 repo 的大小減少 90MB?
  2. 為什么即使是適度的減少也沒有被推送到 Bitbucket 上的遠程存儲庫?
  3. 遠程倉庫的大小究竟是如何從 973MB 躍升到 2.3GB 的?
  4. 我如何解決它? 即使使用 --force 標志,我也無法推送到遠程倉庫。 任何推送都會讓我收到錯誤消息“conq:存儲庫處於只讀模式(超過 2 GB 大小限制)。致命:無法從遠程存儲庫讀取。”

我發現如果超過 2GB 限制,減少 Bitbucket 存儲庫大小的最簡單方法是

  1. 在 Bitbucket 上創建一個分支
  2. 刪除 Bitbucket 上的那個分支

這應該會觸發 Bitbucket 在 repo 上運行git gc

在與 Bitbucket 技術支持商討后​​,我現在可以回答我自己的一些問題:

  1. 為什么將 450MB 的文件移出 repo 只會將我的本地 repo 的大小減少 90MB? 歷史上的某些東西被遺漏了。 我不知道到底是什么,但是 filter-branch 命令遺漏了一些東西。 通過運行實用程序BFG Repo-Cleaner ,我能夠成功地將 repo 大小減少了 450MB。
  2. 為什么即使是適度的減少也沒有被推送到 Bitbucket 上的遠程存儲庫? 確實如此,但 Bitbucket 支持必須在他們身邊運行 git gc。 可以聯系 Bitbucket 請求並要求他們在 repo 上運行 git gc。
  3. 遠程倉庫的大小究竟是如何從 973MB 躍升到 2.3GB 的? 未知。 Bitbucket 技術支持也沒有答案。
  4. 我如何解決它? 聯系 Bitbucket 支持。 他們可以將存儲庫恢復為讀寫模式,以便您可以推送較小的存儲庫,並且他們可以在其末端運行 git gc。

首先,使用以下命令檢查本地存儲庫的大小:-

git count-objects -Hv

我們可以使用以下命令

git reflog expire --expire="1 hour" --all
git reflog expire --expire-unreachable="1 hour" --all
git prune --expire="1 hour" -v
git gc --aggressive --prune="1 hour"

現在,再次使用命令git count-objects -Hv來注意存儲庫大小和垃圾的變化

遠程倉庫的大小究竟是如何從 973MB 躍升到 2.3GB 的?

這是 bitbucket 雲端的一個已知錯誤,請參閱BCLOUD-19794

垃圾文件間歇性地計入存儲庫大小。

當推送到遠程存儲庫時,隨后會觸發 GC,從而生成垃圾文件。 這個垃圾文件在下一次后續 GC 中被清除。 在這兩個 GC 之間,存儲庫的大小在 Bitbucket UI 中顯示不正確,因為垃圾文件大小間歇性地計入存儲庫總大小。

如變通方法部分所述,您需要聯系 bitbucket 以手動運行 GC。

如果有足夠多的人投票支持,Bitbucket 可能會盡早采取行動。

我相信那些熟悉的人已經知道了,但是 git 會存儲您的文件版本歷史記錄,因此進行更改和推送文件不會減少您的存儲庫大小。

還有幾種方法可以減少 bitbucket、GitHub、gitlab 等上的 repo 大小。最好的方法是刪除分支,因為這會永久刪除該分支記錄的任何文件,只要它不被另一個分支跟蹤即可。 但是您可能需要該分支中的最新文件,因此請執行以下操作:

  1. 在本地機器上,創建一個重復的 repo。 (備份,所以你不會丟失信息)
  2. 刪除要移動的分支,或為其創建新版本。 您可以使用--cached刪除遠程分支。
  3. 如果要刷新分支,可以將文件復制到新分支並推送。
  4. 如果你想創建新的遠程倉庫,你也可以這樣做。

根據主機的不同,您可能必須運行特殊命令,但這在大多數情況下應該有效。

暫無
暫無

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

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