小墨の博客

梦想需要付诸行动,否则只能是梦

Git 仓库启用 Git LFS

将现有的Git仓库转换为Git LFS仓库并将仓库中的二进制文件存入Git LFS中

注意:这样的操作会改变Git仓库的历史,因此在执行之前请确保你已经备份了重要的数据。


初始化Git LFS

git lfs install


迁移本地历史仓库

LFS迁移基本思想:LFS重写本地历史 → force push覆写远端,达到迁移的效果。

所以我们最好将本地仓库与远端同步,并且将所有的远端分支都创建本地分支;

而后cd到自己本地仓库,执行以下下命令,--include里面是glob表达式,自行添加想LFS管理的文件名,--everything代表所有本地分支

git lfs migrate import --everything --include="*.ai,*.psd,*.jpg,*.png,*.rp,*.fig"

这个时候无论在哪个分支,都会出现 .gitattributes 文件,且都会被添加上类似以下内容。

*.jpg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rp filter=lfs diff=lfs merge=lfs -text
*.fig filter=lfs diff=lfs merge=lfs -text
*.ai filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text

强烈建议将 .gitattributes 文件提交到Git仓库


同时可以看到我们二进制文件全部都转成了以下形式文本

version https://git-lfs.github.com/spec/v1
oid sha256:9171c8350d72ccca6ad60ac80b577157ad1f9fd44ca05744216e02ccbfcdf491
size 10260


查看有哪些文件被转成了lfs管理,检查是否有遗漏

git lfs ls-files


确认无误,之后就可以推送到远程仓库

由于lfs的迁移会重写所有的commit,并且修改hash值,因此需要我们需要加上--froce

这步需要取消保护分支(保护分支无法-f)

git push --force --all


现在,你的Git仓库已经成功转换为Git LFS仓库,并且二进制文件被存储在Git LFS中。


迁移一些补充说明

1. 迁移者的本地仓库lfs文件转源文件

经过以上步骤,由于我们将所有文件都已经转成文件指针,我们需要将文件下载回来才能正常使用该仓库。

需要注意,其他人重新clone 或者同步 lfs迁移过的remote仓库不需要此步骤,只针对迁移者本地仓库。

git lfs pull


2. 团队中其他成员迁移前的本地仓库同步

由于远程仓库的历史已经被全部重写,所以无法直接同步,最好是删除本地分支,重新拉取远程分支,如果本地已经有部分commit需要提交,可以重名本地分支,拉取远程再做cherry pick。git tag 同理,删除迁移前的tag。

本地仓库清理:上面的迁移成功将二进制文件迁移成git lfs对象,git log也不再存储源文件文件变更而是指针变更,但是在本地.git文件夹中仍存在之前不再需要的git log缓存,执行以下命令做清理。

git reflog expire --expire-unreachable=now --all
git gc --prune=now



本文主要参考:https://blog.csdn.net/weixin_43862847/article/details/121374089


张小弟之家

本文链接:
文章标题:

本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work

尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。

    发表评论:

    搜索
    本文二维码
    标签列表
    站点信息
    • 文章总数:512
    • 页面总数:20
    • 分类总数:92
    • 标签总数:208
    • 评论总数:62
    • 浏览总数:235404

    | | |
    | |  Z-Blog PHP