美文网首页
git lfs大文件管理

git lfs大文件管理

作者: Atomic_Gunner | 来源:发表于2022-11-28 17:03 被阅读0次

    前几天公司要把项目从github仓库更换到阿里云仓库遇到了一个问题,github对上传的单个文件大小限制是1G,而阿里云是单个200M,这里就给我带来了一句吐槽和一个小麻烦,所以探索了一下解决办法并且记录下来,但是仍然会吐槽阿里云。
    步骤:
    1、到我们要上传的文件夹目录,初始化文件夹的git配置,

    $ cd LFSTest/
    $ git init
    
    提示:使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中
    提示:配置使用初始分支名,并消除这条警告,请执行:
    提示:
    提示: git config --global init.defaultBranch <名称>
    提示:
    提示:除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。
    提示:可以通过以下命令重命名刚创建的分支:
    提示:
    提示: git branch -m <name>
    已初始化空的 Git 仓库于 /Users/Desktop/LFSTest/.git/
    

    这个时候已经初始化完成了

    2、修改文件夹的远程仓库地址,这里我们以阿里云仓库为例

    $ git remote add origin https://codeup.aliyun.com/63802b075db8487f76c80eec/LFSTest.git
    

    3、跟踪目录并提交

    $ git add .
    $ git commit
    
    image.png

    输入提交说明
    按 i 键进入编辑状态,底部会出现输入提示


    image.png

    输入完成后按 esc 退出编辑状态,然后按 shift + :进入指令输入状态


    image.png
    然后输入 wq 按下 回车 保存并退出
    [master(根提交) 478b14e] test lfs upload
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 largeFile
    

    这个时候我们已经提交成功了
    4、接下来,推送至远程仓库

    $ git push -u origin master
    

    然后,我们就得到了一个错误

    枚举对象中: 3, 完成.
    对象计数中: 100% (3/3), 完成.
    使用 8 个线程进行压缩
    压缩对象中: 100% (2/2), 完成.
    写入对象中: 100% (3/3), 104.05 MiB | 4.58 MiB/s, 完成.
    总共 3(差异 0),复用 0(差异 0),包复用 0
    remote: 推送失败,以下文件大小超过单文件 200MB 的系统限额:
    remote: Blob ID  | Size(MB) | File name
    remote: -------------------------------
    remote: db54194e | 260.23   | largeFile
    remote: 
    remote: 大文件请使用 Git-LFS 管理,使用说明: https://help.aliyun.com/document_detail/206887.html
    To https://codeup.aliyun.com/63802b075db8487f76c80eec/LFSTest.git
     ! [remote rejected] master -> master (pre-receive hook declined)
    错误:无法推送一些引用到 'https://codeup.aliyun.com/63802b075db8487f76c80eec/LFSTest.git'
    

    这个时候,我们需要根据提示,使用git-lfs大文件管理进行操作,来把我们的大文件推上去

    下面引入正题
    1、让本地仓库支持git lfs

    $ git lfs install
    
    Updated Git hooks.
    Git LFS initialized.
    

    2、通过git lfs追踪本地仓库内的大文件,这里介绍两种方式:
    a:跟踪文件类型,这里以希望跟踪".mp4"类型的文件为例

    $ git lfs track "*.mp4"
    

    b:直接追踪某个文件

    $ git lfs track "largeFile"
    
    Tracking "largeFile"
    

    注:通过该命令可以查看当前正在追踪的文件

    $ git lfs track
    
    Listing tracked patterns
        largefile (.gitattributes)
    Listing excluded patterns
    

    这个时候说明lfs已经追踪到名为 “largefile”的文件了

    3、添加暂存

    $ git add largeFile
    

    4、提交

    $ git commit
    
    [master 12d3f33] commit largefile
    1 file changed, 0 insertions(+), 0 deletions(-)
    

    5、推送至远程仓库

    $ git push --set-upstream origin master
    
    Uploading LFS objects: 100% (1/1), 273 MB | 0 B/s, done.                        
    枚举对象中: 6, 完成.
    对象计数中: 100% (6/6), 完成.
    使用 8 个线程进行压缩
    压缩对象中: 100% (4/4), 完成.
    写入对象中: 100% (6/6), 104.05 MiB | 4.95 MiB/s, 完成.
    总共 6(差异 0),复用 0(差异 0),包复用 0
    remote: 推送失败,以下文件大小超过单文件 200MB 的系统限额:
    remote: Blob ID  | Size(MB) | File name
    remote: -------------------------------
    remote: db54194e | 260.23   | largeFile
    remote: 
    remote: 大文件请使用 Git-LFS 管理,使用说明: https://help.aliyun.com/document_detail/206887.html
    To https://codeup.aliyun.com/63802b075db8487f76c80eec/LFSTest.git
     ! [remote rejected] master -> master (pre-receive hook declined)
    错误:无法推送一些引用到 'https://codeup.aliyun.com/63802b075db8487f76c80eec/LFSTest.git'
    

    好尴尬,为什么还是不行

    原来我们在安装lfs之前有过一次提交包含"largeFile",lfs并不能追踪历史记录里面的大文件,所以我们需要执行一个命令,把提交记录里面所包含的"largeFile"都追踪到
    $ git lfs migrate import --include-ref=master --include="largeFile"
    

    然后执行推送

    $ git push --set-upstream origin master
    
    Uploading LFS objects: 100% (1/1), 273 MB | 0 B/s, done.                        
    枚举对象中: 5, 完成.
    对象计数中: 100% (5/5), 完成.
    使用 8 个线程进行压缩
    压缩对象中: 100% (4/4), 完成.
    写入对象中: 100% (5/5), 502 字节 | 502.00 KiB/s, 完成.
    总共 5(差异 1),复用 0(差异 0),包复用 0
    To https://codeup.aliyun.com/63802b075db8487f76c80eec/LFSTest.git
    * [new branch]      master -> master
    分支 'master' 设置为跟踪 'origin/master'。
    

    这个时候我们可以看到在远程仓库的大文件已经有了通过lfs存储的标识了


    image.png

    相关文章

      网友评论

          本文标题:git lfs大文件管理

          本文链接:https://www.haomeiwen.com/subject/ecluzrtx.html