[英]Is it possible to reduce .git history size in bitbucket?
由於我在 bitbucket 中的存儲庫大小隨着時間的推移增加到 1GB,我想削減它並刪除我不再關心的舊歷史記錄。
我希望將我的存儲庫減少到至少 100 mb(或至少當前的一半)並且有 3-5 個月的歷史。 這意味着我可以在我的歷史中減少提交。
這是我已經嘗試過但沒有用的方法:
git gc
(帶有--aggressive --prune
等標志)。 它確實將我的回購大小減少到本地大約 400mb。 但是我無法將它推送到遠程,因此我的 BitBucket 的存儲庫大小保持不變。 我嘗試使用此方法進行 Bitbucket 垃圾收集清理: https://stackoverflow.com/a/27868384/8610581以及https://stackoverflow.com/a/37253227/8610581git clone --shallow-since=<date>
以及--depth
),這正是我需要的。 不幸的是,我不能從淺克隆中創建一個新的存儲庫(git 不允許這樣做)。刪除 Git 中的歷史記錄(同時保留最新提交)的唯一方法是替換存儲庫。
替換存儲庫可以與原始存儲庫同名,但它將有一組完全不同的提交。 原因是每個提交都有編號(使用 hash ID),並且編號方案合並了上一個提交的編號。 因此,如果舊存儲庫中總共有 1000 個提交,而新存儲庫中現在只有 500 個提交,則新存儲庫中第一個提交的提交編號不同,這意味着最后一個提交的提交編號在新的存儲庫中也是不同的。
要復制一些舊的提交,和/或在此過程中刪除大文件,從舊存儲庫到新存儲庫,有許多可用的工具。 Git 包含的那個是git filter-branch
,它正在被git filter-repo
替換(但 filter-repo 尚未包含在 Git 本身中)。 您也可以使用BFG 。
請注意,這些工具通常按以下過程工作:
克隆原始存儲庫。 (現在,如果你無法挽回地損壞克隆體,你只需將其丟棄並重新開始!)
在克隆上使用該工具。 這會在適當的位置重寫存儲庫。
檢查結果是否良好。 如果不是,則丟棄此克隆並 go 返回步驟 1。
如有必要(例如git filter-branch
)執行一些最終確定步驟(使用git filter-branch
最終確定是刪除refs/original/
或克隆此克隆;請參閱文檔)。
請記住,最終結果實際上是一個全新的存儲庫。 如果您允許 Git 將它與舊存儲庫合並,您將獲得所有舊提交(您想要刪除的那些),並且現在有兩個您想要保留的提交副本。
git gc
僅從 Git 歷史記錄中刪除不再引用的條目。 要刪除回購中不必要的歷史條目,您必須按以下順序進行清理:
master
分支上的舊提交:這會刪除對舊條目的引用,但將舊條目保留在.git
文件夾中。git gc
和git prune
:這會從本地.git
文件夾中刪除新的較短的 Git 歷史記錄不再引用的舊條目git push --force
。 由於歷史不同,BitBucket 拒絕正常推送,您必須使用--force
覆蓋服務器上的歷史。git reset --hard origin/master
或任何您的主要開發分支。master
分支重新設置所有打開的功能分支的基線,以便在合並它們時不會取回舊的歷史記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.