Я оцениваю поведение 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 Расширения.