如何导入包含大文件的git存储库?

时间:2016-06-23 08:36:47

标签: git github git-lfs github-enterprise bfg-repo-cleaner

鉴于GitHub doesn't allow to push files larger than 100 MB,不可能将包含大文件的存储库git clone and push导入GitHub企业。推送失败了:

remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: error: File large.zip is 145.00 MB; this exceeds GitHub Enterprise's file size limit of 100.00 MB

(N.B。:有一个repository importer,但这只适用于github.com,需要公开访问您的存储库)

幸运的是,GitHub provides support for storage of files larger than 100MB自2015年4月以来。那么如何将当前存储库与如此大的文件转换为GitHub LFS兼容的存储库,我可以推送到哪里?

2 个答案:

答案 0 :(得分:1)

您现在可以使用git lfs migrate内置命令来评估最适合迁移的文件,并进行实际的历史记录重写。

有关更多详细信息,请参见git-lfs migration tutorial

答案 1 :(得分:0)

我找到的最简单方法是利用git filter-branchBFG Repo-Cleaner by rtyley(我使用的版本1.12.12):

  1. 先决条件:您需要安装git lfs

  2. 在GitHub Enterprise上创建一个新的存储库。您将外部Git存储库导入到这个新存储库。

  3. 克隆要迁移到本地文件夹的存储库:

  4. $ git clone --mirror git@oldgithost:repo
    $ cd repo.git
    # mirror into a local directory
    
    1. 将历史记录重写为lfs - 跟踪您的大文件 1
    2. $ git filter-branch --tree-filter 'git lfs track "*.{zip,jar}"' -- --all
      # writes the patterns to lsf-track into .gitattributes
      
      1. 使用BFG将相关文件解压缩到Git LFS
      2. $ java -jar ~/usr/bfg-repo-cleaner/bfg-1.12.12.jar --convert-to-git-lfs '*.zip'
        $ java -jar ~/usr/bfg-repo-cleaner/bfg-1.12.12.jar --convert-to-git-lfs '*.jar'
        # Convert large files (I couldn't find a one-liner for multiple patterns)
        
        1. 推送到您的GitHub企业远程:
        2. $ git push --mirror https://hostname/ghuser/repo.git
          # Pushes the mirror to the new GitHub Enterprise repository
          
          1. 删除临时目录:
          2. $ cd ..
            $ rm -rf repo.git
            

            备注

            1 由于I / O很高,使用-d选项将历史记录重写到磁盘上的临时目录是recommended,例如:在tmpfs。