[英]How can I reduce the actual size of my github repo? (rather than just my local checkout)
[英]How can I reduce the size of my git repo?
我的git repo應該相對較小,但是我過去提交的文件很大,所以我的.git/objects/pack
文件很大。 我已經很長時間沒有接觸過此存儲庫了,所以我不知道導致該存儲庫大小超出所需大小的文件名。
如何縮小git repo的大小?
通常,您需要重寫Git歷史記錄並刪除這些文件: https : //git-scm.com/book/en/v1/Git-Tools-Rewriting-History
之后,您強行推送到存儲庫,就應該完成了。
如果需要重寫,我通常使用git rebase -i <options>
,但這取決於您的特定情況。
PS:執行此操作時也要注意其含義(分支機構可能沒有父母,其他人將根據基准進行硬重置或硬重置,以便您可以取回這些文件,等等)
從git歷史記錄中查找和清除大文件是有關如何查找和刪除大文件的好文章。
最低限度的步驟是:
1)Git具有唯一的SHA,它在整個歷史記錄中都與每個對象(例如,稱為blob的文件)相關聯。 這有助於我們找到該對象並決定是否值得稍后刪除:
git rev-list --objects --all | sort -k 2 > allfileshas.txt
2)獲取所有已提交文件的最后一個對象SHA並按最大到最小順序對其進行排序:
git gc && git verify-pack -v .git/objects/pack/pack-*.idx | egrep "^\w+ blob\W+[0-9]+ [0-9]+ [0-9]+$" | sort -k 3 -n -r > bigobjects.txt
3)獲取結果並遍歷每一行以查找SHA,文件大小(以字節為單位)和真實文件名(您還需要上面的allfileshas.txt輸出文件):
for SHA in `cut -f 1 -d\ < bigobjects.txt`; do
echo $(grep $SHA bigobjects.txt) $(grep $SHA allfileshas.txt) | awk '{print $1,$3,$7}' >> bigtosmall.txt
done;
4)使用filter-branch刪除文件/目錄(將MY-BIG-DIRECTORY-OR-FILE替換為相對於git repo根目錄要刪除的路徑:
git filter-branch --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch MY-BIG-DIRECTORY-OR-FILE' --tag-name-filter cat -- --all
5)然后克隆倉庫,並確保不要留下任何硬鏈接:
git clone --no-hardlinks file:///Users/yourUser/your/full/repo/path repo-clone-name
5)這沒有包括在文章中,但是我需要強行推回購
git push --force
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.