如何往Github上push超過100M的文件

Problem

當咱們往github上push超過50M的文件時,github會給出警告;而當文件大小超過100M的時候,github會reject。雖然咱們通常不推薦往github上push大文件,但當有些資源文件或大型的數據集確實須要用版本管理起來時,咱們該如何作呢?git

Solution

Git LFS (Git Large File Storage ),它的核心思想能夠用下圖描述:
Git LFSgithub

如上圖所示,Git remote server並無真正保存上傳的大文件,而是有一個文本指針指向了大文件所存儲的位置(github有專門存儲大文件的地方,所以你能夠不用關心它具體存儲的位置),若是你本地沒有安裝git lfs,卻clone了一個使用了git lfs的倉庫的話,你會發現有些文件是文本類型,並有相似以下內容:api

version https://git-lfs.github.com/sp...
oid sha256:4b99dbe6fe6f646b2026de93481045bbf34f995559db15fce34d192f1f320ef4
size 156154

這些文件就是文本指針。你能夠在安裝完git lfs後使用git lfs pull命令將大文件真正的pull下來。bash

How to use

  1. 去官網(https://git-lfs.github.com/)... lfs,確認環境變量已經配置好;
  2. 打開命令行運行url

    git lfs install

    以上命令只需執行一次,使git lfs完成全局的配置。spa

  3. 針對須要track的大文件運行下面的命令:命令行

    #  跟蹤單個文件
    git lfs track "<file_name>"  
    
    # 跟蹤一類文件,如改爲目錄的全部以「.zip」結尾的文件
    git lfs track "*.zip"
    
    # 跟蹤「dir」文件夾及其全部內容
    git lfs track "dir/**"

    git lfs track命令的 track 規則與.gitignore的規則同樣,請參考 https://git-scm.com/docs/giti...指針

  4. 運行完track命令後所在工程目錄會生成.gitattributes文件,裏面記錄了你所track的文件,你也能夠直接編輯該文件來改變track規則。接下來注意,先add並commit.gitattributes文件,按照官網的說法這時再按通常git的操做已經能夠push大文件了,可是本人沒有試成功,後來參考別人成功的經驗是,不只要add和commit該文件,還要先將該文件push上去,而後再對你的大文件進行普通的git操做。固然,在push以前能夠先運行git lfs ls-files來查看相應的文件是否track成功。

Supplements

  1. Git LFS 的詳細命令,能夠經過code

    $ git lfs help <command>
    $ git lfs <command> -h

    來查看,或是進入https://github.com/git-lfs/gi...打開任意一個你感興趣的以.ronn爲後綴的文件,裏面有對該命令的較爲詳細的描述。server

  2. 關於Git LFS server的url的問題,能夠參考https://github.com/git-lfs/gi...。固然,你也能夠本身搭建和配置git lfs server並將其url配置到git lfs的客戶端。
  3. 官方教程,請參考https://github.com/git-lfs/gi...
相關文章
相關標籤/搜索