2

鉴于GitHub 不允许推送大于 100 MB 的文件,因此无法git clone 并将包含大文件的存储库推送到 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

(注意:有一个存储库导入器,但这仅适用于 github.com,并且需要公开访问您的存储库)

幸运的是,自 2015 年 4 月以来,GitHub提供了对大于 100MB 文件的存储支持。那么如何将当前包含如此大文件的存储库转换为我可以推送到的 GitHub LFS 兼容存储库?

4

2 回答 2

1

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

有关更多详细信息,请参阅git-lfs 迁移教程

于 2018-10-16T11:23:40.420 回答
0

我发现最简单的方法是利用git filter-branchrtyley 的 BFG Repo-Cleaner(我使用了 version 1.12.12):

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

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

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

$ git clone --mirror git@oldgithost:repo
$ cd repo.git
# mirror into a local directory
  1. 重写历史以 lfs-track 您的大文件1
$ git filter-branch --tree-filter 'git lfs track "*.{zip,jar}"' -- --all
# writes the patterns to lsf-track into .gitattributes
  1. 使用 BFG 将相关文件提取到 Git LFS
$ 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 企业远程:
$ git push --mirror https://hostname/ghuser/repo.git
# Pushes the mirror to the new GitHub Enterprise repository
  1. 删除临时目录:
$ cd ..
$ rm -rf repo.git

笔记

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

于 2016-06-23T08:36:47.197 回答