Отображение панели «Diff» при фиксации со многими (100K +) измененными файлами, в расширениях git, без зависания - PullRequest
0 голосов
/ 20 апреля 2020

Я оцениваю поведение Git Расширений в достаточно большом (частном) git хранилище:

  • 20 лет истории, 200 000 коммитов
  • 200 000 файлов в основная ветвь
  • 30 ГБ репо (12 ГБ после git gc --aggressive)
  • 1 ГБ пакетных файлов для мелкого клона (глубина = 1)
  • 5 ГБ для всех работающих файлы для всех 200 000 файлов в простой / полной проверке

Ключом здесь является количество файлов: 200 КБ в текущей ветви. git status занимает около 7 секунд для запуска в Windows; не прекрасно, но не проблема.

Git Расширения обычно обрабатывают этот репо довольно плавно / изящно - во время запуска требуется несколько секунд, чтобы завершить sh загрузку сумасшедшего количества коммитов, но в Между тем это уже отзывчиво. Я могу go до последнего коммита с самым ранним коммитом в секунду (End или Home ключей), все работает хорошо.

Проблема возникает, когда я делаю неглубокий клон этого репо и попробуйте получить доступ к панели «Diff». Например, с глубиной = 5 и настройками по умолчанию:

  • Мелкий клон завершается без проблем
  • Git Расширения загружает / отображает репо без проблем
  • Я могу перейти к любому из 5 коммитов без каких-либо проблем, если не пытаюсь получить доступ к панели «diff»
  • Если я получу доступ к панели «Diff» на самом раннем коммите с добавленным 200k файлы, затем Git Extensions зависает на несколько минут, пока он пытается запустить diff и подготовить измененный список файлов

Эта проблема может быть гораздо более патологической, в зависимости от вашего Git Extensions display конфигурации. Например, если для макета отображения задано «Зафиксировать информацию слева от графика», и вы выполняете очень мелкий клон, тогда Git Расширения просто зависают при запуске / полностью непригодны для использования:

  • Установите в пользовательском интерфейсе Git Extensions значение «Зафиксировать информацию слева от графика» или «Зафиксировать информацию справа от графика», чтобы максимально эффективно использовать экранное пространство
  • Мелкий клон репо (--depth = 1)
  • Откройте репо в Git Расширения -> приложение зависает на 5 минут, казалось бы, сломано, так как оно пытается отобразить панель Diff, отображаемую по умолчанию, для единственной мелкой базовой фиксации с добавлением 200k-файлов.

Это кажется особенно проблематичным c для пользователей, использующих Sparse Checkout, так как они не ожидают (не должны) ожидать, что все остальные файлы в репо нарушат их работу. .. но git extensions (насколько я могу судить) не имеют никакого способа соблюдать конфигурацию разреженной проверки при отображении diff изменения.

Есть ли способ сообщить Git Расширения, чтобы сделать eithe r из:

  • Отображать только файлы, относящиеся к разреженной проверке, только в diff или
  • Показывать только частичные различия ( и некоторое сообщение о переполнении «есть больше»), когда список файлов в diff становится слишком большим или
  • Сделайте так, чтобы панель Diff загружалась асинхронно, чтобы приложение не было полностью заблокировано в этой ситуации

Я думаю, я не знаю, как это сделать в самой git Я выделил "простой git" вопрос в Git и разреженный контроль на больших моноросах - скрытие несущественных изменений для спецификации разреженного контроля? (git -diff, git -log, et c) . Этот текущий вопрос посвящен Git Расширения.

...