前几天公司要把项目从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
网友评论