Git(七).git 文件夹瘦身,GitLab 永久删除文件

这篇具有很好参考价值的文章主要介绍了Git(七).git 文件夹瘦身,GitLab 永久删除文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题背景

由于项目在打 Docker 包的时候,需要将前端的包也打到 Docker 容器中,所以将前端包和前端的 Dockerfile 文件都放在了后端的 Git 目录下。

久而久之,由于前端包的更新迭代,Git 上面会一直保留前端包的历史版本,所以整个后端的 .git 越来越大,截至目前已经有 2.44G 了。每次有新的小伙伴加入 git 后都需要花很长时间来拉取代码,苦不堪言,而且 Jenkins 上面新建项目的拉取也会超时。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

二、问题复现

2.1 新建项目

在 GitLab 上新建一个项目 my-test

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

我们可以看到,新建好的项目,默认只有 20KB

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

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-test2

2.3 上传结果

将大文件上传到 GitLab 后,仓库的大小如下:

  • .git11.2MB
Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab
  • GitLab11.3MB

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

三、解决方案

注意:操作前要保证是最新版本。

3.1 GitLab备份与还原

1)备份

在操作之前,我们要先备份 GitbLab 中的项目。最简单的方式就是直接将项目导出来。

在 GitLab 上打开项目,进入菜单 Settings -> General -> Advanced,点击 Expand 打开折叠。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

点击 Export project

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

可以看到提示,这个导出是一个异步的操作,当导出完毕之后会将通知发送到邮箱。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

邮件中会有一个下载链接,点击链接下载,保存24小时。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

下载后文件如下,文件名格式为:日期_时分秒_用户名_项目名.tar.gz

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

2)还原

点击首页的 New project

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

选择 Import project

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

选择 GitLab export

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

输入项目名称,选择我们之前导出的 .tar.gz 文件,点击 Import project

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

还原完毕,分支和大小都在。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

3.2 删除方式一:git filter-repo 命令【推荐】

  • git-filter-repo 官网: https://github.com/newren/git-filter-repo
  • python 官网: https://www.python.org/

注意:git-filter-repo 工具需要依赖 Git 和 Python。

1)安装
# 安装(pip是Python自带的安装工具)
pip install git-filter-repo
# 查看版本
git-filter-repo --version

执行结果:

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

注意: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.

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

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(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

git filter-repo 命令本身是用来将处理后的本地仓库重新推送到新的远程仓库用的,所以执行命令之后,查看 .git/config 配置文件,里面远程仓库的内容都被清空了:

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

执行之后,查看本地 .git 文件夹大小,从 11.2MB 直降至 32.8KB

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab
3)重新关联远程仓库

重新关联远程仓库的命令如下:

git remote add origin https://git.xxx.cn/acgkaka/my-test.git
4)删除远程仓库文件

执行如下命令,将本地仓库的改动强制推送到远程仓库即可。

git push --force origin --all

执行结果如下:

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

此时,GitLab 的远程仓库大小还是 11.2 MB,并无效果,别担心,还有最后一步操作。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

4)clean up 清理远程仓库

做完上面的操作之后,等待半小时,是的,等待30分钟,因为 GitLab 不会清理半小时内提交的文件。

在 GitLab 上打开项目,进入菜单 Settings -> Repository -> Repository cleanup,点击 Expand 打开折叠。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

在使用 clean up 时,需要提交一个文件,这个文件就是文件根目录下的 .git/filter-repo/commit-map

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

可以看到提示,这个导出是一个异步的操作,当cleanup完毕之后会将通知发送到邮箱。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

邮件中会说明 cleanup 后的仓库大小,为 0.1MB

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

再去 GitLab 查看远程仓库大小,从 11.3MB 直降至 51KB,瘦身成功。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

(经验证,这种方式删除掉的历史文件,即使有其他成员的本地仓库有未提交的版本,需要复制出来,删除本地仓库重新克隆后,再粘贴提交。)

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-test1dev-test2 分支被重写了。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

2)删除远程仓库文件

执行如下命令,将本地仓库的改动强制推送到远程仓库即可。

# 推送本地所有分支到远程
git push --force --all

执行结果如下,可以看到 dev-test1dev-test2 分支被强制更新了。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

我们可以去 GitLab 上面看下提交记录,"如果之前的提交只涉及被删除文件的话,对应提交记录就会被清空,如果提交中除了被删除文件之外还包含其他文件,那么提交记录和其他文件都会被保留,不受影响。

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

3)重新 repack 远程分支到本地

执行如下命令,删除 refs/original 文件夹,并重新更新远程仓库到本地。

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

执行之后,查看本地 .git 文件夹大小,从 11.2MB 直降至 32KB

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

再次声明,这种方式虽然可以删除分支中的文件历史、提交记录,但是并不会减少 GitLab 中远程仓库的大小。远程仓库大小依然为 11.3MB。(有大佬知道后面怎么处理的,欢迎评论补充)

Git(七).git 文件夹瘦身,GitLab 永久删除文件,Git,git,gitlab

整理完毕,完结撒花~ 🌻





参考地址:

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

6.git 仓库越来越大,如何清理?https://juejin.cn/post/7254009710139146299文章来源地址https://www.toymoban.com/news/detail-741055.html

到了这里,关于Git(七).git 文件夹瘦身,GitLab 永久删除文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git 删除仓库中多余的文件或者文件夹

    目录 问题 解决方案 第一步:同步代码 第二步:删除文件 第三步:提交 第四步:推送远端 在项目开发测试阶段,将无意间将本地敏感的、或无用的文件或目录不小心提交到远程仓库,该怎么解决呢。  先pull远程代码,保持同步。 填写备注信息。 推送成功刷新仓库。 如果

    2024年01月16日
    浏览(83)
  • git删除已经push的远程文件或文件夹

    在使用git提交项目时,有时候会误提交一下文件,比如:*.iml,*.project,*.settings,.idea/*等文件,有时候这些不需要提交的文件可以加入到.gitignore,在提交的时候可以忽略这些文件,但是有时候我们忘记,就会出现误提交一些文件,这时就需要我们删除误提交的文件,下面是

    2024年02月08日
    浏览(50)
  • 文件夹永久删除怎么恢复

    电脑已经成为生活中必不可少的一部分。我们通常会使用电脑来存储和管理各种重要的文档和文件。但是,随着我们使用电脑的次数增加,难免会清理,如果不小心删除了我们的文件夹。在这种情况下,我们可能会有一些后怕,当我们想要找回这些文件夹时,重要的问题是

    2024年02月07日
    浏览(100)
  • git删除远程仓库上已提交的文件/文件夹

    由于给本地项目配置远程库,误提交很多不应该提交的文件或文件夹,比如 .idea .settings .project .iml 以及日志等文件。以及由于 .gitignore 文件配置不正确很有可能导致某些不需要的目录上传到 git 远程仓库上了。除了注意配置 .gitignore 文件外,以下是解决办法。 提交了文件到自

    2024年02月11日
    浏览(94)
  • 如何删除gitlab上的文件夹

    参考:如何删除gitlab上的文件夹 1.在本地新建一个文件夹,进入文件夹,右键git bash here。 2.在命令行窗口输入拉去gitlab仓库的命令,git clone +\\\"仓库地址\\\",然后查看是否拉取成功。 3.在本地把需要删除的文件删除,直接右键--删除。 4.在文件夹内右键git commit +\\\"对应的分支\\\",提

    2024年02月13日
    浏览(42)
  • Git(三).git 文件夹详解

    官网地址: https://www.git-scm.com/ 官方文档: https://www.git-scm.com/docs 官方电子书: https://git-scm.com/book/zh/v2 GitHub: https://github.com/git/git 命令: git init 解析: 如果需要对现有的某个项目使用 Git 管理,只需要到项目所在目录,执行该命令即可。 作用: 初始化后,在当前目录下会

    2024年02月04日
    浏览(41)
  • 解决git clone后对应文件夹没有.git文件

    使用git clone 命令后发现对应文件夹没有找到.git文件 这是因为.git文件默认是隐藏的,如果想看到,需要我们设置显示隐藏的文件夹 通过以上操作就能够将解决找不到.git文件的问题。 注意:.git文件为版本库,版本库中储存了配置信息,日志信息等,不需要我们修改。

    2024年02月11日
    浏览(67)
  • git add 文件、文件夹

    git add 添加多个文件,文件之间以空格隔开 多次git add source目录下及子目录下所有文件,home目录下的所有.py文件 git add . ,注意 “.” 前面有空格,添加所有的文件, 或者 git add --all 添加所有的文件 git add 目的是将修改文件由工作区提交到暂存区,可以多次提交,然后commit操

    2024年02月09日
    浏览(46)
  • Git中.gitignore的配置(git上传忽略文件/文件夹)

            在实际开发过程中,我们很多项目都需要使用git工具进行代码的拉取和提交等操作。但项目由于环境配置和打包等操作生成了一些不必要上传的文件夹或者一些我们自定义的文件不需要上传,这时候我们需要去配置.gitignore文件。 语法 # 开头为注释行 空行即直接写文

    2024年02月12日
    浏览(59)
  • vscode显示当前打开的文件夹中没有git存储库,但实际上有.git文件夹。

    问题描述:当前打开的文件夹中没有 git 存储库。但实际上有.git文件夹。 解决方案:https://github.com/microsoft/vscode/issues/139598 The only way to make it work is to use the Git: Show Git Output… command. 在vscode的查看–命令面板,输入show git,执行后即可正确出现git 仓库。 如果执行上述命令后,

    2024年02月11日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包