Git Large File Storage 初见指南

在 Git 中咱们的最佳实践是 不要使用 Git 跟踪大型的二进制文件, 可是每每可能有一些特殊的需求. 因此咱们能够考虑使用 Git Large File Storage (LFS) 来处理.node

Git Large File Storage 是什么

Git Large File Storage (LFS) 是一个由 GitHub 开发的 Git 扩展项目, 于 2013/09/22 建立. 用于加强 Git 对大文件追踪的支持.python

众所周知, Git 在储存二进制文件时, 效率堪忧, 由于 Git 默认会压缩和储存每一次提交的快照, 若是二进制文件不少, 会使得 Git 的 clone 效率变得很是低.linux

如何解决这个问题呢, 那就要介绍 Git LFS 了.git

Git LFS 处理大型二进制文件的方式是用 "文件指针" 进行替换, 这些文本指针其实是包含二进制文件信息的文本文件, 大小不到 1kb。文本指针存储在 Git 中,而大文件自己经过 HTTPS 托管在 Git LFS 服务器上。github

那么下面演示下如何安装和使用 Git LFSapi

如何使用 Git LFS

安装 Git LFS

你能够经过两种方式安装 Git LFSbash

  • APT / brew
  • 二进制包

APT 的方式安装

前往 git-lfs.github.com 点击 Install Vx.x.x via PackageCloud 在跳转的页面中选择合适的安装方式, 目前支持的安装方式有 deb,rpm,node,python,gem服务器

而后运行以下curl

# In Ubuntu
# 检查和安装 apt Repository
$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
# 经过 apt 安装 git-lfs
$ sudo apt install git-lfs

# In MacOS
$ brew install git-lfs
复制代码

还支持经过 deb,rpm,node,python,gem 的方式安装,详细参阅gitlab

二进制包

前往 git-lfs release 页面, 下载合适的平台的二进制包, 而后运行包中的 install.sh

例如位于 linux_amd64 , 运行以下指令便可

$ tar -zxvf git-lfs-linux-amd64-v2.7.2.tar.gz
$ tree .
    ├── CHANGELOG.md
    ├── git-lfs
    ├── git-lfs-linux-amd64-v2.7.2.tar.gz
    ├── install.sh
    └── README.md
$ sudo ./install.sh
复制代码

Git LFS 使用介绍

那么如何在项目中使用 Git LFS 呢, 让咱们从零开始尝试使用 Git LFS 吧

# 建立这个 DEMO 的文件夹
$ mkdir git-lfs-demo && cd git-lfs-demo

# 在当前目录建立一个 20M 的大文件
$ dd if=/dev/zero of=a-big-file.pdf bs=1M count=20

# git 初始化
$ git init

# 将 a-big-file.pdf 使用 git lfs
# 你也能够利用 git lfs track "*.pdf" 指定 所有的 pdf 文件
$ git lfs track "a-big-file.pdf"

# 接着添加远程库
$ git remote add origin git@github.com:x/x.git

# 而后提交文件
$ git add -A && git commit -a -m "git lfs test" && git push origin master

# 而后访问 github 接口查看该文件的大小
$ curl https://api.github.com/repos/x/x | grep size

# 能够看到这里的 size 写着 0, 由于是 m 为单位, 因此意味着咱们上传的东西远小于 1M
# 至此, 将二进制文件 git lfs 的形式上传到 git 仓库成功
复制代码

git-lfs 经常使用的指令包括以下:

$ git lfs track
# 将一个或者一类文件以 git lfs 的方式加入到版本控制中 (实质是修改 .gitattributes 文件)
$ git lfs untrack
# 将一个或者一类文件从 仓库中移除

$ git lfs status
# 相似于 git status , 显示 git lfs 方式的文件在 暂存区的状态

$ git lfs lock
# 锁定一个或者一些文件, 只容许当前的用户对这些文件进行修改, 防止在多人协做的场景下冲突
$ git lfs unlock
# 同上, 解锁一个或者一些文件

$ git lfs migrate
# 用来将当前已经被 git 储存库保存的文件以 git lfs 的保存 (将 git 对象转为 lfs 对象)
# 例如若是将当前远程不存在的的全部 pdf 文件清除
# git lfs migrate import --include="*.pdf"
#
# 若是是已经上传到中心服务器的内容, 则须要指定分支 (可能须要 push --force)
# git lfs migrate import --include="*.mp4" --include-ref=refs/origin/master --include-ref=refs/origin/dev --include-ref=refs/origin/test
#
# 而后使用以下命令清理 .git 目录
# git reflog expire --expire-unreachable=now --all && git gc --prune=now

$ git lfs ls-files
# 展现所有使用 git lfs 方式加入版本控制的文件

$ git lfs prune
# 删除所有旧的 Git LFS 文件

$ git lfs fetch
$ git lfs pull
$ git lfs push
$ git lfs checkout
# 正常状况下会随着 git pull/push 一块儿执行
# 若是在 git pull/push 的过程当中断了, 致使二进制文件没有被拉取的时候, 可使用这些命令(支持断点续传,速度不慢)
复制代码

能够经过 git lfs --help 指令看到 git lfs 的所有指令,

各个平台的支持状况

为了防止滥用, 各个平台对 Git LFS 有不一样的限制

GitHub

GitHub 的所有 Repo 的 Git LFS 内容不得超过 1G, 流量限制 1G, 限制的仍是比较严格的, 详情

可使用每月 $5 的钞能力增长限制, 每月订阅的费用每上升 $5, 内容大小和流量限制上升 50G.

BitBucket

BitBucket 免费帐号 File Storage 限制为 1GB, $2/month 的 Standard 帐号为 5GB $5/month 的Premium 帐号为 10GB

GitLab

GitLab 没有找到 Git LFS 限制的相分描述, 可是他们有提到单个 Repo 的储存限制为 10G, 想必是包含了 Git LFS 内容的大小在内.

Gitee

码云中, Git LFS 功能只对付费企业和我的开放, 内容大小限制未知.

结语

虽然 Git LFS 能给咱们在大文件上传 版本库带来不少便利, 可是仍是推荐谨慎使用.

Alternatives

同时推荐 Kuri-su/GitMindMap-command Git 思惟导图

ex

ref:

git-lfs.github.com/

github.com/git-lfs/git…

github.com/git-lfs/git…

about.gitlab.com/2015/04/08/…

cloud.tencent.com/developer/a…

blog.csdn.net/aixiaoyang1…

www.oschina.net/news/61374/…

www.infoq.cn/article/201…

help.github.com/en/articles…

www.jianshu.com/p/ed2b6081f…

blog.csdn.net/aixiaoyang1…

gitee.com/help/articl…

欢迎到 github.com/Kuri-su/KBl… 开 Issue 讨论

相关文章
相关标签/搜索