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 討論

相關文章
相關標籤/搜索