Git Checkout для ветки занимает много времени
Я использую Ubuntu 17.10 и использую git (версия 2.14.1). Всякий раз, когда я создаю ветку из master и пытаюсь оформить заказ на нее (или на master из нее), это занимает много времени, около нескольких минут, иногда около 10 минут. Правда, у меня есть несколько ГБ данных, но, насколько я понимаю, все данные на самом деле не копируются, а вместо этого сохраняются только изменения. В чем же может быть проблема?
2 ответа
Git 2.20 (Q4 2018) улучшит git checkout
скорость:
" git checkout -b newbranch [HEAD]
msgstr "не нужно делать столько, сколько нужно проверить коммит, отличный от HEAD.
Предпринята попытка оптимизировать этот особый случай.
Смотрите коммит fa655d8 (16 августа 2018 г.) Бен Пирта ( benpeart
)
(Объединено Юнио С Хамано - gitster
- в коммите 0faaf7e, 17 сентября 2018 г.)
checkout
: оптимизироватьgit checkout -b <new_branch>
"Пропустите объединение коммитов, обновление индекса и рабочего каталога тогда и только тогда, когда мы создаем новую ветку через "
git checkout -b <new_branch>.
"
Любые другие варианты оформления заказа по-прежнему будут проходить по прежнему пути кода.Если
sparse_checkout
включено, требует, чтобы пользователь вручную включил это оптимизированное поведение, установив параметр конфигурацииcheckout.optimizeNewBranch
к истине, так как мы больше не будем обновлятьskip-worktree
бит в индексе, а также добавлять / удалять файлы в рабочем каталоге, чтобы отразить текущие настройки разреженного извлечения.Для сравнения работает
git checkout -b <new_branch>
"На большой репо берется:
14.6 seconds - without this patch
0.3 seconds - with this patch
Ты должен бежать git gc
помогает производительности.
git gc
Цель двоякая: удаление незакрепленных объектов и упаковка объектов для более эффективного использования дискового пространства.
Запускает ряд служебных задач в текущем репозитории, таких как сжатие версий файлов (для уменьшения места на диске и увеличения производительности) и удаление недоступных объектов, которые могли быть созданы из предыдущих вызовов git add.