簡體   English   中英

是否可以減少 bitbucket 中的 .git 歷史大小?

[英]Is it possible to reduce .git history size in bitbucket?

由於我在 bitbucket 中的存儲庫大小隨着時間的推移增加到 1GB,我想削減它並刪除我不再關心的舊歷史記錄。

我希望將我的存儲庫減少到至少 100 mb(或至少當前的一半)並且有 3-5 個月的歷史。 這意味着我可以在我的歷史中減少提交。

這是我已經嘗試過但沒有用的方法:

  1. 運行git gc (帶有--aggressive --prune等標志)。 它確實將我的回購大小減少到本地大約 400mb。 但是我無法將它推送到遠程,因此我的 BitBucket 的存儲庫大小保持不變。 我嘗試使用此方法進行 Bitbucket 垃圾收集清理: https://stackoverflow.com/a/27868384/8610581以及https://stackoverflow.com/a/37253227/8610581
  2. 我嘗試了淺克隆( git clone --shallow-since=<date>以及--depth ),這正是我需要的。 不幸的是,我不能從淺克隆中創建一個新的存儲庫(git 不允許這樣做)。
  3. 我嘗試通過將許多舊提交壓縮為一個來減小我的回購協議的大小。 我確實設法在我的回購中獲得更少的提交,但這並沒有影響我的存儲庫的大小(特別是 .git 文件夾)並且它保持不變。
  4. 刪除未使用和合並的分支

刪除 Git 中的歷史記錄(同時保留最新提交)的唯一方法是替換存儲庫。

替換存儲庫可以與原始存儲庫同名,但它將有一組完全不同的提交 原因是每個提交都有編號(使用 hash ID),並且編號方案合並了上一個提交的編號。 因此,如果舊存儲庫中總共有 1000 個提交,而新存儲庫中現在只有 500 個提交,則存儲庫中第一個提交的提交編號不同,這意味着最后一個提交的提交編號在新的存儲庫中也是不同的。

要復制一些舊的提交,和/或在此過程中刪除大文件,從舊存儲庫到新存儲庫,有許多可用的工具。 Git 包含的那個是git filter-branch ,它正在被git filter-repo替換(但 filter-repo 尚未包含在 Git 本身中)。 您也可以使用BFG

請注意,這些工具通常按以下過程工作:

  1. 克隆原始存儲庫。 (現在,如果你無法挽回地損壞克隆體,你只需將其丟棄並重新開始!)

  2. 在克隆上使用該工具。 這會在適當的位置重寫存儲庫。

  3. 檢查結果是否良好。 如果不是,則丟棄此克隆並 go 返回步驟 1。

  4. 如有必要(例如git filter-branch )執行一些最終確定步驟(使用git filter-branch最終確定是刪除refs/original/或克隆此克隆;請參閱文檔)。

請記住,最終結果實際上是一個全新的存儲庫。 如果您允許 Git 將它與舊存儲庫合並,您將獲得所有舊提交(您想要刪除的那些),並且現在有兩個您想要保留的提交副本。

git gc僅從 Git 歷史記錄中刪除不再引用的條目。 要刪除回購中不必要的歷史條目,您必須按以下順序進行清理:

  1. 壓縮master分支上的舊提交:這會刪除對舊條目的引用,但將舊條目保留在.git文件夾中。
  2. 運行git gcgit prune :這會從本地.git文件夾中刪除新的較短的 Git 歷史記錄不再引用的舊條目
  3. 將新的較小的 Git 歷史推送到 BitBucket: git push --force 由於歷史不同,BitBucket 拒絕正常推送,您必須使用--force覆蓋服務器上的歷史。
  4. 所有其他也檢查了你的 repo 的計算機,例如你的 CI 服務器,現在都不同步了。 要使它們恢復同步,請運行git reset --hard origin/master或任何您的主要開發分支。
  5. 根據新的master分支重新設置所有打開的功能分支的基線,以便在合並它們時不會取回舊的歷史記錄。

暫無
暫無

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

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