Как импортировать репозитории 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
):
Условие: вам нужно иметь
git lfs
установленыСоздайте новый репозиторий на GitHub Enterprise. Вы импортируете свой внешний Git-репозиторий в этот новый репозиторий.
Клонируйте репозиторий, который вы хотите перенести в локальную папку:
$ git clone --mirror git@oldgithost:repo
$ cd repo.git
# mirror into a local directory
- Перепишите историю, чтобы lfs-отслеживать ваши большие файлы 1:
$ git filter-branch --tree-filter 'git lfs track "*.{zip,jar}"' -- --all
# writes the patterns to lsf-track into .gitattributes
- Используйте 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)
- Нажмите на свой корпоративный пульт GitHub:
$ git push --mirror https://hostname/ghuser/repo.git
# Pushes the mirror to the new GitHub Enterprise repository
- Удалить временный каталог:
$ cd ..
$ rm -rf repo.git
Заметки
1 Из-за большого количества операций ввода-вывода рекомендуется переписать историю во временный каталог вне диска с помощью опции -d, например, в tmpfs.
Теперь вы можете использовать git lfs migrate
встроенная команда для оценки того, какие файлы лучше всего переносить, а также для фактического переписывания истории.
Смотрите руководство по миграции git-lfs для более подробной информации.