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

Учитывая, что GitHub не позволяет загружать файлы размером более 100 МБ, невозможно выполнить клон git и отправить хранилище с большими файлами в GitHub enterprise. Толчок терпит неудачу с:

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-совместимый репозиторий, к которому я могу обратиться?

2 ответа

Решение

Самым простым способом, который я нашел, было использование 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, например, в tmpfs.

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

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

Другие вопросы по тегам