有一個項目用git管理立镶,因為誤提交了一些大文件师逸,java_pid*.hprof穆咐,及時發(fā)現刪除了,但是導致.git目錄大小1.1G,于是決定對其瘦身字旭,瘦身是bfg方法对湃,網上找開源了一個Java寫的工具類,可以快速瘦身遗淳,具體參考BFG Repo-Cleaner by rtyley
git clone --mirror url
首先新建一個目錄dir拍柒,進入目錄執(zhí)行,git clone --mirror ssh://git@aa:bb/cc/project.git屈暗,一直報錯
Cloning into bare repository 'project.git'...
git@aa: Permission denied (publickey).
fatal: Could not read from remote repository.
電腦一直用的sourcetree拆讯,使用ssh助手(ssh-agent)加載配置的ssh key,一直可以养叛,但是在git bash不行种呐,于是重新生成配置ssh key到gitlab,還是不行弃甥,網上找到了解決方法:
在git bash執(zhí)行:
ssh-agent.exe bash
加載配置到gitlab的ssh key:
ssh-add /c/Users/cc/.ssh/240613_id_rsa
再執(zhí)行
git clone --mirror ssh://git@aa:bb/cc/project.git
Cloning into bare repository 'project.git'...
remote:
remote:
Enumerating objects: 111291, done.
remote:
remote:
remote: Compressing objects: 100% (40643/40643), done.
kex protocol error: type 7 seq 714141), 1012.50 MiB | 10.96 MiB/s
Receiving objects: 100% (111291/111291), 1.06 GiB | 10.92 remote: Total 111291 (delta 50796), reused 111291 (delta 50796)
MiB/s, done.
Resolving deltas: 100% (50796/50796), done.
執(zhí)行成功:
之后就是按照:BFG Repo-Cleaner by rtyley 來執(zhí)行爽室,
啟動bfg-1.14.0.jar
首先把bfg.jar下載下來,放到project.git
同級目錄淆攻,執(zhí)行
java -jar bfg-1.14.0.jar --strip-blobs-bigger-than 100M project.git
…
…
BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive
這個是
危險操作
阔墩,具體按照上面的鏈接來操作嘿架,操作之前,最好進行備份啸箫,我是用gitlab先fork了project.git耸彪,然后才進行操作,原項目沒有動忘苛,當做備份蝉娜;
這個語句是找出超過100M的文件,進行刪除扎唾,執(zhí)行成功蜀肘,提示你在git客戶端執(zhí)行另外一個方法,
git reflog expire --expire=now --all && git gc --prune=now --aggressive
執(zhí)行完之后稽屏,執(zhí)行
git push
執(zhí)行完之后,重新拉取項目西乖,就可以看到.git目錄減少到了MB級別狐榔。
ONE MORE THING
最新的gitlab還支持其他方法,使用gitlab的同學获雕,可以在這個位置找到操作方法
{url}/help/user/project/repository/reducing_the_repo_size_using_git.md