создание ветки git очень медленно в большом репозитории - PullRequest
0 голосов
/ 19 мая 2018

У меня есть локальный репозиторий с ~ 300.000 файлов и около 40 ГБ в зашифрованной файловой системе (и я не могу это изменить ...).мне часто нужно создать новую ветвь и сделать текущее содержимое рабочего каталога содержимым этой ветви.

, так что эта «проверка» на самом деле не проверка, которая изменяет что-либо в рабочем дереве, а просто создаетветвь, переключается на нее и оставляет рабочий каталог без изменений.и не о больших файлах : средний размер файла намного меньше 1 МБ (40 ГБ / 300000 = 130 КБ)

в настоящее время я делаю:

git checkout -q -b mynewbranch
git add -v -A
git commit -q -m "at mynewbranch"

вВ принципе это работает, но первый шаг по созданию ветки занимает больше часа (!).(«add» и «commit» занимают несколько минут, я бы с этим смирился.) «git checkout», кажется, перечитывает весь рабочий каталог только для того, чтобы создать ветвь.

в идеалея хотел бы, чтобы создание ветви заняло бы совсем немного времени, и его состояние должно просто основываться на ранее существующей ветви.и тогда «добавление» также не должно занимать слишком много времени, так как можно использовать временные метки, и не все содержимое файла следует сравнивать с репозиторием, только файлы с новыми временными метками должны просматриваться подробно.

есть кто-нибудьидея, как это можно сделать эффективно?

edit: git 2.17, ubuntu, encfs over ext4, новейшее оборудование, 12 процессоров, в основном двоичные файлы (такие как pdf, jpeg, mp4; нет глубокого дерева; им нужнобыть версионным).

основная проблема заключается в следующем: можно ли избежать того, чтобы при создании ветки просматривалось содержимое всех файлов?

1 Ответ

0 голосов
/ 19 мая 2018

git не предназначен для работы с большими репозиториями (хотя Microsoft недавно работала над расширением его поддержки - см. Комментарий к вопросу выше).Я предлагаю вам разбить ваш репозиторий на несколько репозиториев и / или использовать LFS.Если вы используете LFS, вы, вероятно, захотите использовать BFG Repo Cleaner для эффективного воссоздания хранилища без всех больших файлов в истории - если только хранилище не состоит из исключительно больших файлов.

LFS поддерживает управление версиями :

Управление версиями больших файлов

Версии больших файлов - даже тех, что размером в пару ГБ - с помощью Git.

...