1. 程式人生 > 其它 >清理git提交記錄並不能達到真正硬碟“瘦身”

清理git提交記錄並不能達到真正硬碟“瘦身”

清理git提交記錄並不能給“瘦身”

  上週發現gitlab同步到線上的主伺服器cpu和記憶體報警。

  我其實有點懷疑是同步指令碼中git命令導致的,要不就是下面的同步命令(每1分鐘跑一次);要不就是每5分鐘去git目錄跑一次的git status監控是否有未提交檔案 。因為之前也時不時會出現cpu報警,這個罪魁禍首善待查證,先放一邊。

1 cd $git_home
2 git fetch --all
3 git reset --hard origin/master

  整個資料盤有100G,去除留給系統用的,實際上能用的有93G。然後du下.git 目錄,當時佔用59G。然後我用“git gc”去清理本地版本庫。發現執行過程中 .git 目錄隨著命令執行,越來越大。當時根本不夠空間讓它執行完畢,然後我只能強制退出,挪走一部分檔案,再執行。反反覆覆試了很多次,.git 目錄就像無底洞一樣,不斷吞噬硬碟空間,直到膨脹到 78G。

  只能停掉所有定時指令碼,然後跟經理研究下,怎麼在不重做git的情況下(即rm 整個git目錄,再git clone 拉程式碼),給它瘦身。

  

  當時我經理就覺得清掉2019年前的 git log 提交記錄,是可以減少 .git 空間的。本來我們是打算刪除老舊的提交記錄,發現沒找到合適的,所以決定測試一個完全清空提交記錄的實驗。

  然後他跟我在電腦進行測試,以下是我復原當時測試過程:

參考文件:https://huochengyan.blog.csdn.net/article/details/107244931?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-3.nonecase

1、gitlab新建一個專案:ljytest-20210629,把一個有提交記錄的專案導進去

共有809個提交記錄

2、把專案:ljytest-20210629拉到本地,方便檢視git大小

本地需要先給許可權

未執行清空提交記錄時,檢視.git 大小,為156MB

git log也能查到記錄

3、執行清提交記錄命令

git checkout --orphan latest_branch
git add -A
git commit -am "commit mytest-202106292254"
git branch -D master
git branch -m master

git push -f origin master

報錯了,要gitlab頁面上設定下,去除master分支上的專案保護,點選: Unprotect

重新執行即可

4、執行後的效果圖

這時候master分支上只有一個commit

再看看 .git 目錄大小,大小沒變,是不是很絕望~~~

  為了不打擊我經理的想法,我就不拆穿這個殘忍的真相了。。。(其實想象下,就一堆字元記錄,類比成一個寫了很多內容的記事本,怎麼大都不可能做到佔用70+G的,而且這個專案提交記錄實際上也就 3w 條不到,所以時候想想,從情況提交記錄去釋放空間是不太可取的)

  問題最終解決還是重新做git目錄,rm .git 刪除專案關聯,再git clone 專案到伺服器。

  對於這個 .git 隨著提交不斷龐大的問題,我覺得做好兩點吧:

(1)運營發文章的時候不要上傳過大的檔案(超100M),不然同步到gitlab上,".git\objects\pack" 就會越來越大

(2)定時執行git gc 回收空間咯,例如定時指令碼每週回收一次這樣