海南房地产网站,幸福人寿保险公司官方网站保单查询,惠城网站设计,怎么做辅助发卡网站目录 一、问题背景二、问题复现2.1 新建项目2.2 上传大文件2.3 上传结果 三、解决方案3.1 GitLab备份与还原1#xff09;备份2#xff09;还原 3.2 删除方式一#xff1a;git filter-repo 命令【推荐】1#xff09;安装2#xff09;删除本地仓库文件3#xff09;重新关联… 目录 一、问题背景二、问题复现2.1 新建项目2.2 上传大文件2.3 上传结果 三、解决方案3.1 GitLab备份与还原1备份2还原 3.2 删除方式一git filter-repo 命令【推荐】1安装2删除本地仓库文件3重新关联远程仓库4删除远程仓库文件4clean up 清理远程仓库 3.3 删除方式二git branch-filter 命令【不推荐】1删除本地仓库文件2删除远程仓库文件3重新 repack 远程分支到本地 一、问题背景
由于项目在打 Docker 包的时候需要将前端的包也打到 Docker 容器中所以将前端包和前端的 Dockerfile 文件都放在了后端的 Git 目录下。
久而久之由于前端包的更新迭代Git 上面会一直保留前端包的历史版本所以整个后端的 .git 越来越大截至目前已经有 2.44G 了。每次有新的小伙伴加入 git 后都需要花很长时间来拉取代码苦不堪言而且 Jenkins 上面新建项目的拉取也会超时。 二、问题复现
2.1 新建项目
在 GitLab 上新建一个项目 my-test。 我们可以看到新建好的项目默认只有 20KB。 2.2 上传大文件
执行命令将项目克隆到本地
git clone http://xxxx/xxx/xxx.git此时.git 文件夹大小为 30.7KB。
为了更加全面地测试我们创建两个分支并且分别上传文件。
分支、文件结构对应关系如下 dev-test1 分支 | - pdf 文件夹 | - test_1.pdf 文件12.8MB | - test_2.pdf 文件12.8MB dev-test2 分支 | - pdf 文件夹 | - test_1.pdf 文件12.8MB | - test_2.pdf 文件12.8MB
相关命令如下
# 创建dev-test1分支
git checkout -b dev-test1
git add -A .
git commit -m update test1
git push origin dev-test1# 创建dev-test2分支
git checkout -b dev-test2
git add -A .
git commit -m update test2
git push origin dev-test22.3 上传结果
将大文件上传到 GitLab 后仓库的大小如下
.git11.2MB GitLab11.3MB 三、解决方案
注意操作前要保证是最新版本。
3.1 GitLab备份与还原
1备份
在操作之前我们要先备份 GitbLab 中的项目。最简单的方式就是直接将项目导出来。
在 GitLab 上打开项目进入菜单 Settings - General - Advanced点击 Expand 打开折叠。 点击 Export project。 可以看到提示这个导出是一个异步的操作当导出完毕之后会将通知发送到邮箱。 邮件中会有一个下载链接点击链接下载保存24小时。 下载后文件如下文件名格式为日期_时分秒_用户名_项目名.tar.gz 2还原
点击首页的 New project。 选择 Import project。 选择 GitLab export。 输入项目名称选择我们之前导出的 .tar.gz 文件点击 Import project。 还原完毕分支和大小都在。 3.2 删除方式一git filter-repo 命令【推荐】
git-filter-repo 官网 https://github.com/newren/git-filter-repopython 官网 https://www.python.org/ 注意git-filter-repo 工具需要依赖 Git 和 Python。 1安装
# 安装pip是Python自带的安装工具
pip install git-filter-repo
# 查看版本
git-filter-repo --version执行结果 注意git-filter-repo 需要在一个刚刚 clone 下来的仓库中进行操作否则会操作失败。
Aborting: Refusing to destructively overwrite repo history since this does not look like a fresh clone. (expected at most one entry in the reflog for HEAD) Please operate on a fresh clone instead. If you want to proceed anyway, use --force. 2删除本地仓库文件
git clone 到本地后立即执行如下命令
不要做切换分支等操作否则会报错删除重新克隆才行。
# 模糊匹配删除所有pdf文件会同时删除pdf文件夹
git filter-repo --path-glob *.pdf --invert-paths# 补充精确匹配仅删除pdf/test_1.pdf
git filter-repo --path-glob pdf/test_1.pdf --invert-paths执行结果如下 git filter-repo 命令本身是用来将处理后的本地仓库重新推送到新的远程仓库用的所以执行命令之后查看 .git/config 配置文件里面远程仓库的内容都被清空了 执行之后查看本地 .git 文件夹大小从 11.2MB 直降至 32.8KB。 3重新关联远程仓库
重新关联远程仓库的命令如下
git remote add origin https://git.xxx.cn/acgkaka/my-test.git4删除远程仓库文件
执行如下命令将本地仓库的改动强制推送到远程仓库即可。
git push --force origin --all执行结果如下 此时GitLab 的远程仓库大小还是 11.2 MB并无效果别担心还有最后一步操作。 4clean up 清理远程仓库 做完上面的操作之后等待半小时是的等待30分钟因为 GitLab 不会清理半小时内提交的文件。 在 GitLab 上打开项目进入菜单 Settings - Repository - Repository cleanup点击 Expand 打开折叠。 在使用 clean up 时需要提交一个文件这个文件就是文件根目录下的 .git/filter-repo/commit-map。 可以看到提示这个导出是一个异步的操作当cleanup完毕之后会将通知发送到邮箱。 邮件中会说明 cleanup 后的仓库大小为 0.1MB。 再去 GitLab 查看远程仓库大小从 11.3MB 直降至 51KB瘦身成功。 经验证这种方式删除掉的历史文件即使有其他成员的本地仓库有未提交的版本需要复制出来删除本地仓库重新克隆后再粘贴提交。
3.3 删除方式二git branch-filter 命令【不推荐】 注意 目前经过尝试发现 git branch-filter 虽然可以删除分支中的文件历史、提交记录但是并不会减少 GitLab 中远程仓库的大小。 1删除本地仓库文件
可以直接操作删除所有分支的文件但是要注意必须保证所有分支都是最新代码才行。
也可以切换到具体分支执行 git pull 拉取最新代码后再进行删除只要去除后面的 -- --all即可。
# 模糊匹配删除所有pdf文件会同时删除pdf文件夹
git filter-branch --force --index-filter git rm --cached --ignore-unmatch *.pdf --prune-empty --tag-name-filter cat -- --all# 补充精确匹配仅删除pdf/test_1.pdf
git filter-branch --force --index-filter git rm --cached --ignore-unmatch pdf/test_1.pdf --prune-empty --tag-name-filter cat -- --all执行结果如下可以看到 dev-test1 和 dev-test2 分支被重写了。 2删除远程仓库文件
执行如下命令将本地仓库的改动强制推送到远程仓库即可。
# 推送本地所有分支到远程
git push --force --all执行结果如下可以看到 dev-test1 和 dev-test2 分支被强制更新了。 我们可以去 GitLab 上面看下提交记录如果之前的提交只涉及被删除文件的话对应提交记录就会被清空如果提交中除了被删除文件之外还包含其他文件那么提交记录和其他文件都会被保留不受影响。 3重新 repack 远程分支到本地
执行如下命令删除 refs/original 文件夹并重新更新远程仓库到本地。
git for-each-ref --formatdelete %(refname) refs/original | git update-ref --stdin
git reflog expire --expirenow --all
git gc --prunenow执行之后查看本地 .git 文件夹大小从 11.2MB 直降至 32KB。 再次声明这种方式虽然可以删除分支中的文件历史、提交记录但是并不会减少 GitLab 中远程仓库的大小。远程仓库大小依然为 11.3MB。有大佬知道后面怎么处理的欢迎评论补充 整理完毕完结撒花~ 参考地址
1.使用 git-filter-repo 清理 git 历史记录https://nyakku.moe/posts/2020/06/12/use-git-filter-repo-clean-git-history.html
2.利用git-filter-repo无缝迁移git项目https://zhuanlan.zhihu.com/p/465078705
3.git: 如何减少.git文件的大小https://blog.csdn.net/LOI_QER/article/details/107911115
4…git文件过大github仓库瘦身https://blog.csdn.net/luchengtao11/article/details/82531044
5.从Git仓库GitLab中彻底去除大文件https://zhuanlan.zhihu.com/p/589903338