git仓库清理

关于git仓库的清理,主要就是清理git仓库里面的大的二进制文件。网上查了很多教程,很多都是用:git filter-branch.清理仓库中的大文件。

我尝试着本地测试了一下,发现是真慢呀。

方法一、git filter-branch

step1:查看又哪些大文件(查看前5个大文件)

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

step2: 从仓库中删除文件或文件夹

复制代码
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all

git filter-branch --index-filter 让每个提交的文件都复制到索引(.git/index)中

然后运行过滤器命令:*git rm --cached --ignore-unmatch 文件名 ,*让每个提交都删除掉"文件名"文件

然后--prune-empty 把空的提交"修剪"掉

然后*--tag-name-filter cat* 把每个tag保持原名字,指向修改后的对应提交

最后-- --all 将所有ref(包括branch、tag)都执行上面的重写

step 3:删除缓存下来的ref和git操作(这一步可以跳过,也可以不执行)

复制代码
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin

step4:运行git gc清理

复制代码
git reflog expire --expire=now --all && git gc --prune=now --aggressive

step5:强制推送到远端

复制代码
git push --force origin master

反正用这个方法没成功,感觉问题出在最后的推送上,因为我本地是瘦身成功的。网上搜到一些说是要把分支删得只剩master再操作。

方法二:BFG Repo-Cleaner

这个工具很快,而且会给出清理文件和受保护分支。清理后的report很清晰,推荐使用这个。git很多周边工具还是挺好用的。

环境要求:安装了java的机器。

工具下载:https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar

工具拷贝到机器的某个位置,可重命名为bfg.jar。

我是直接对gerrit的裸库进行操作的。

step1: 在gerrit服务home目录的git目录下找到对应要瘦身仓库的.git目录。

step2: 运行如下命令:(清理大于500M的提交)

复制代码
java -jar bfg.jar --strip-blobs-bigger-than 500M /usr/local/gerrit/git/common/test.git

step3: 运行如下命令进行git gc

复制代码
git reflog expire --expire=now --all && git gc --prune=now --aggressive

这样就完成裸库清理,启动gerrit服务即可。

我看guide里面最后一步都是强制推送:git push origin master --force

我感觉推完我还是没有瘦身成功,所以直接在裸库上操作了。

写在最后:这个重写git仓库太伤了,我不会再操作了,退出此江湖。。

附上git对这一块的指导文档,写得还是很清晰的:Git - 维护与数据恢复

相关推荐
C++ 老炮儿的技术栈5 小时前
在 Scintilla 中为 Squirrel 语言设置语法解析器的方法
linux·运维·c++·git·ubuntu·github·visual studio
余很多之很多10 小时前
命令行和neovim的git操作软件-lazygit
git
猫头虎10 小时前
GitHub下载教程:2025年最新详解从GitHub上传、下载文件、子目录与完整项目【图文教程】
git·svn·gitee·开源·github·gitea·gitcode
i建模17 小时前
将远程 main 分支同步到 develop 分支的完整指南
git
即使再小的船也能远航1 天前
【Git】实用Git操作指南:从入门到高效协作
git
<但凡.2 天前
Git 完全手册:从入门到团队协作实战(4)
git·bash
SugarPPig2 天前
Git 创建一个完全没有提交历史的 master 分支
git
lb29172 天前
git的使用,推送仓库github
git·github
躲在云朵里`2 天前
Git的使用
大数据·git·elasticsearch
悟能不能悟3 天前
在 IntelliJ IDEA 中打开这个用于设置 Git 用户名(Name)和邮箱(Email)的特定弹窗
java·git·intellij-idea