gitlab重寫歷史,清理歷史大文件


1.導出gitlab上原倉庫作為備份。

2.克隆遠端倉庫代碼

git clone http://ip/group/repo.git
cd repo.git

3.拉取倉庫的所有分支

git branch -r | grep -v '\->' | while read remote;do git branch --track 
"${remote#origin/}" "$remote";done
git branch
git tag
git fetch --all
git pull --all

[4.]查找歷史大文件(若是知道具體的大文件,不需要查)

     將最大的10個文件查詢出來:

git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx 
| sort -k 3 -n | tail -10 | awk '{print $1}')"

4.處理記錄

git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch 文件或
目錄' --prune-empty --tag-name-filter cat -- --all
提示:此過程會在項目根目錄生成".git_……"文件夾,里面就是改的記錄,且一次只能清理一個文件夾或者文件

5.回收空間

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

6.刪除原倉庫,新建原倉庫的同名倉庫,重新關聯已清理的倉庫,直接推送。

git remote set-url origin http://ip/group/repo.git
git remote -v
git push origin --all
git push origin --tags

至此,垃圾清理完成。

注意:下次開發時需要重新拉取git倉庫上的代碼,否則還會引入之前大文件的歷史記錄。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM