Git上传大文件夹LFS

0.106字数 913阅读 438

什么是Git LFS

Git LFS(Large File Storage) 是 Github 开发的一个 Git 的扩展,用于实现 Git 对大文件的支持。
简单的说,就是如果你想传超过100M的二进制文件到GitHub,你就要用Git LFS

注意事项:GitHub、GitLab、Coding。gitee(也就是git.oschina.net)目前还不支持。

使用Git Large File Storage

1.下载LFS

安装 https://git-lfs.github.com/

2.安装LFS

jingjing:~ anpengtao$ brew install git-lfs

3.运行并更新相关库 jingjing:~ anpengtao$ git lfs install

jingjing:~ anpengtao$ git lfs install
Git LFS initialized.

4.选择您希望Git LFS管理(或直接编辑.gitattributes)的文件类型

jingjing:InteractionBaby anpengtao$ git lfs track "KidLibrary/KidLibrary/TCPlayer/QALSDK.framework/QALSDK"
Tracking "KidLibrary/KidLibrary/TCPlayer/QALSDK.framework/QALSDK"

默认在当前文件夹下面会生成 .gitattributes 文件
open .gitattributes 可以进行相关配置

追踪单个文件:

git lfs track "FrameworkFold/XXXFramework/xxx"

追踪指定类型的文件:

git lfs track "*.dmg"

不再使用 Git LFS 管理指定的文件:

git lfs untrack "*.dmg"

追踪指定目录下的文件:

git lfs track "FrameworkFold/*"

枚举目前所有被 Git LFS 管理的具体文件:

git lfs ls-files

针对使用了 LFS 的仓库进行了特别优化的 clone 命令,显著提升获取LFS 对象的速度,接受和 git clone 一样的参数。

git lfs clone https://github.com/user/repo.git
[1] git lfs clone 通过合并获取 LFS 对象的请求,减少了 LFS API 的调用,并行化 LFS 对象的下载,从而达到显著的速度提升。git lfs clone 命令同样也兼容没有使用 LFS 的仓库。即无论要克隆的仓库是否使用 LFS,都可以使用 git lfs clone 命令来进行克隆。
[2] 目前最新版本的 git clone 已经能够提供与 git lfs clone 一致的性能,因此自 Git LFS 2.3.0 版本起,git lfs clone 已不再推荐使用

Tracking "KidLibrary/KidLibrary/TCPlayer/QALSDK.framework/QALSDK"
.framework不可以直接创建,需要使用framework文件夹中的具体文件进行添加。

5.1 git add

git add .gitattributes

5.2 git add 具体文件

jingjing:InteractionBaby anpengtao$ git add KidLibrary/KidLibrary/TCPlayer/QALSDK.framework/QALSDK

错误实例:
jingjing:InteractionBaby anpengtao$ git add QALSDK
fatal: pathspec 'QALSDK' did not match any files

6.git commit

jingjing:InteractionBaby anpengtao$ git commit -m "QALSDK"
jingjing:InteractionBaby anpengtao$ git commit -m "QALSDK"

[master 2e88312] QALSDK
2 files changed, 4 insertions(+)
create mode 100644 .gitattributes
create mode 100644 KidLibrary/KidLibrary/TCPlayer/QALSDK.framework/QALSDK

7. git push

jingjing:InteractionBaby anpengtao$ git push origin master
list text here`Uploading LFS objects: 100% (1/1), 138 MB | 0 B/s, done
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 4 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 806 bytes | 806.00 KiB/s, done.
Total 8 (delta 3), reused 1 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To https://github.com/隐蔽/InteractionBaby.git
49073bf..2e88312 master -> master

注意事项:

1.路径是从项目的第一层开始的物理路径,不是XCode中的文件路径
2..framework不能直接进行添加,需要删除大文件,第一步push提交framework中的小文件.h/.m等,然后单独将大文件导入到物理路径中,进行以上所有操作,提交。

在安装 Git LFS 之前,克隆了使用 Git LFS 的仓库,则被 Git LFS 管理的文件会被显示为文本指针,而非具体的文件。
查看这些文件指针,会发现类似如下内容
version https://git-lfs.github.com/spec/v1
oid sha256:4b99dbe6fe6f646b2026de93481045bbf34f995559db15fce34d192f1f320ef4
size 156154
解决办法就是,手动执行获取 Git LFS 对象的命令:
git lfs fetch
git lfs checkout
# 或
git lfs pull

推荐阅读更多精彩内容