zoukankan      html  css  js  c++  java
  • Git项目过大清理(针对大文件)

    一、问题说明

    如图,由于之前上传了一些比较大的文件,导致项目太大。即使后来删除,记录中还是保存了这个文件。以后不管是拷贝,还是push/pull都比较麻烦。这会导致所有人每次git fetch需要浪费很多时间。查看项目仓库大小可以使用命令git count-objects -vH

    如图,我的项目已经超过4G了,下面进行清理。

    切记: 大文件需要添加到 .gitignore文件

    二、解决方法

    1、拉取项目:将项目所有分支拉下来

    2. 查看有哪些大文件

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


    这里查询最大的前10个,然后观察其中是否有需要删除的大文件,比如这里是测试视频和模型权重,都应该删除。

    3. 移除对该文件的引用

    git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch 文件/文件夹' --prune-empty --tag-name-filter cat -- --all
    

    文件如:5.mp4
    文件夹如:/models/
    注意:一次只能处理一个文件/文件夹,如果有多个需要耐心处理。

    4. 回收空间,清理本地仓库中不可到达的对象

    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
    

    如图,删掉视频后,从2G减小到700M。

    5. 推送到服务器,清理远程仓库

    git push origin --force --all
    git remote prune origin  
    

    完成后拉取项目将会变小,但是Gitlab的项目的大小并不会变化。不过后面拉取项目会变小,也变成700M了

    5. 注意

    清理完之后,每个人一定要删掉之前拉取的项目, 重新从git上拉项目。不要使用之前的项目了!否则会不降反升!
    这是赤裸裸教训

    三、清理服务器缓存

    如果有条件进入到Gitlab服务部署目录,可以对远程仓库进行确认和瘦身。(没有条件,没有尝试)

    sudo su
    cd ${gitlab项目部署目录}/git-data/repositories/{待清理的项目地址}
    git count-objects -vH   # 此时还是旧的大小
    git gc --prune=now  # 清理无效文件
    git count-objects -vH  # 此时就和本地一样,从库减小了
    

    参考资料

    1. 知乎-如何解决 GitHub 提交次数过多 .git 文件过大的问题?
    2. 找出并删除git库中的大文件
    3. Git从库中移除已删除大文件
  • 相关阅读:
    将数据导入第三方系统
    希望可以看到自己的积分
    WF疑惑
    GUID
    wf HandlExternalEvent传递参数到自定义属性中
    今天做了一天的网站,烦恼
    WF 参数传递,今天终于把WORKFLOW的参数回传回来了
    今天开始在这里写博了
    寻求帮助,怪问题
    WF终于有了一点入门的感觉
  • 原文地址:https://www.cnblogs.com/geoffreyone/p/14603537.html
Copyright © 2011-2022 走看看