git 項目工程過大問題解決

問題描述

  • 提交記錄中的大文件
  • 拉取代碼的時候很慢,甚至是失敗

如何解決

注意:清理完之後,其他人一定要刪掉之前拉取的項目,重新從 git 上拉項目,不要使用之前的項目了,之前的項目中的.git 文件會將已將刪除的文件重新加進來,甚至變的更大

查詢/清理文件的時候若是想提速,可以關掉 360/電腦管家等這樣的軟件,這些軟件會監控文件,拖慢速度...我之前提示 8 小時的處理,關掉 360 之後 2 小時就完成了.

查看倉庫大小

git count-objects -vH  # 查看當前倉庫大小

du -sh  # 查看這個文件夾的總大小

ls -lh  # 查看這個文件夾中文件的大小

解除保護分支

默認情況下,git 項目是有一個保護分支的

操作

1. 拉取項目:將項目所有分支拉下來

git clone xxx # 默認拉取master分支
cd xx #進入拉取的文件夾
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all

2. 查找大文件(若是知道具體的文件,不需要查)

# 將最大的10個文件查詢下來
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"
# 比如我查詢了
486fa66baeb237a456266dccfab8bab14cde98ba pro_web_front_202009101858.gz
d644ed6c55ecc6e058a0a7d0c39c4e49984a37d1 src/assets/img/2.png
f45b37335083ad5c5598e3cf5a75a9fc07b9a803 static/pdf/build/pdf.worker.js.map
21e9d2cd0c73b246d86f603c7ff0e5cd8b8312bc static/pdf/web/operationManual.pdf
7c65cab916684f43d66053e570dbdf453e8ca507 src/assets/img/login.png
f8aebc2a121c89c99190553ac9b3dcc853315182 src/assets/img/login_2.png
13868adfda3704f8a8b10f64da068a11a418ccf2 src/assets/img/login_3.png
# 其中需要刪的是 pro_web_front_202009101858.gz

3. 處理記錄

#文件可以是文件夾,也可以是文件 ,
#例如:文件夾的話可以是  /dist.js/
#例如:文件可以是  static/pdf/build/pdf.worker.js
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch 文件' --prune-empty --tag-name-filter cat -- --all
# 會在項目根目錄生成 .git_....文件夾,裏面就是改的記錄
# 一次只能處理一個文件/文件夾

# 回收空間
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
# 此時查看本地,會發現項目明顯減小了,若是還有需要的文件,就重複第3步即可
# (p.s. 原作者說會減小,但是我這裏整個工程還是跟原來的一樣大,可能是因爲我主要是刪除歷史文件,本地的問題並沒有刪除什麼)

4. 推送到服務器

git push origin --force --all
git remote prune origin
# 此時 ,拉取項目就已經是減小後的大小
# 但是查看服務器,服務器顯示的大小還是原來的大小(p.s.這裏是因爲 gitlab 服務器本身也是有緩存的)

5. 清理服務器緩存

# 進入git服務器-->這個操作需要root權限,不然連文件夾都進不去
cd /var/opt/gitlab/git-data/repositories
#根據項目,進入對應的git項目文件夾
# 進入 項目.git文件,就可以看到和本地的.git目錄中一樣的目目錄了
#查詢git項目大小
git count-objects -vH   # 此時還是舊的大小
git gc --prune=now  # 清理無效文件
git count-objects -vH  # 此時就和本地一樣,從庫減小了
# 貌似 gitlab 服務器有緩存,此時服務器的倉庫中文件大小已經減小了,但是在瀏覽器上通過頁面查看,還是原來的大小
# (p.s.我因爲是用的公司集團的gitlab,無法直接操作到gitlab的服務器,所以此處的操作沒有實際嘗試過,但是應該是沒有問題的)

結果圖

原文參考:git 項目過大清理
好像是個更好的方法:使用 bfg 快速清理 git 歷史大文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章