Как импортировать репозитории git с большими файлами?

Учитывая, что GitHub не позволяет отправлять файлы размером более 100 МБ, невозможно git clone и 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

(Примечание: есть импортер репозиториев, но это только для github.com и требует общего доступа к вашему репозиторию)

К счастью, GitHub обеспечивает поддержку хранения файлов больше 100 МБ с апреля 2015 года. Так как же преобразовать текущий репозиторий с такими большими файлами в репозиторий, совместимый с GitHub LFS, в который я могу отправить?


person Alberto    schedule 23.06.2016    source источник
comment
Вы можете увеличить этот лимит, но делать это следует с осторожностью.   -  person osowskit    schedule 21.09.2016


Ответы (2)


Теперь вы можете использовать встроенную команду git lfs migrate как для оценки файлов, которые лучше всего перенести, так и для фактической перезаписи истории.

См. руководство по миграции git-lfs. для более подробной информации.

person Ido Ran    schedule 16.10.2018
comment
У меня нет времени, чтобы проверить это в данный момент, но это определенно выглядит так, как сейчас. Я меняю принятый ответ на этот, пока не будет доказано обратное. Спасибо. - person Alberto; 25.10.2018

Самый простой способ, который я нашел, это воспользоваться git filter-branch. и BFG Repo-Cleaner от rtyley (я использовал версию 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 отслеживал ваши большие файлы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 Из-за большого количества операций ввода-вывода это рекомендуется переписать историю во временный каталог вне диска с параметром -d, например на тмпфс.

person Alberto    schedule 23.06.2016