Подтвердить что ты не робот

Git Статус длится долго

Я использую git для управления файлами в локальном каталоге на компьютере под управлением Windows. Здесь не задействована сеть, я не нажимаю и не нажимаю на другую машину. В моем каталоге есть, возможно, 100 файлов, все тестовые файлы, довольно маленькие. Когда я запускаю git status, он занимает 20-30 секунд. Это нормально? Есть ли что-нибудь, что я могу сделать, чтобы ускорить его, или лучший способ узнать, что такое состояние моего репозитория (измененные файлы, файлы без следа и т.д.)? Другие команды git выглядят намного быстрее.

4b9b3361

Ответ 1

Вы пробовали git gc? Это очищает рывок из репо git.

Ответ 2

Используете ли вы какое-то программное обеспечение для защиты от вирусов? Может быть, это мешает. git очень быстро для меня на окнах с репозиториями из 1000 файлов.

Ответ 3

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

Я переместил вторичный репозиторий git где-то еще, и теперь скорость быстро!

Ответ 4

Вы пробовали переупаковывать? мерзавец

В противном случае попробуйте дублировать каталог и удалить папку .git в дублированном каталоге. Затем создайте новый каталог git и посмотрите, будет ли он все еще медленным.

Если это все еще медленно, то это походит на системную или аппаратную проблему. Git завершает статус для сотен файлов для меня менее чем за 5 секунд.

Ответ 5

По какой-то причине git status особенно медленно после перемещения или копирования папки репозитория в новое место.

В этом случае последующие прогоны обычно быстрее.

Ответ 6

Мой git status был очень медленным (до одной минуты), потому что глобальный файл .gitignore находился в моем профиле пользователя windows, который хранился в недоступном сетевом ресурсе.

git config --global core.excludesfile
показал что-то вроде \\Nxxxx0\User\Username\Eigene Dateien\gitignore_global.txt

По какой-то причине \\Nxxxx0 был недоступен, и мой профиль пользователя был загружен из резервной системы \\Nxxxxx1. Потребовалось некоторое время, чтобы понять это, потому что обычно мой userprofile привязан к букве диска сценарием запуска предприятия, и доступ к этой букве диска работал как обычно. Я не уверен, почему git-config использовал сетевой ресурс, а не букву диска (вероятно, виноват младший я)

После настройки
git config --global core.excludesfile $HOME/Eigene\ Dateien/gitignore_global.txt
git status вернулось к нормальной скорости.

Ответ 7

Другим аспектом состояния git status который будет улучшен (в Git 2.14.x/2.15, Q4 2017), является также отображение игнорируемых файлов ( git status --ignored)

" git status --ignored ", когда замечает, что каталог без отслеживаемого пути игнорируется, по-прежнему перечисляет все игнорируемые пути в каталоге, что не нужно.
Путь к коду был оптимизирован, чтобы избежать этих издержек.

См. Коммит 5aaa7fd (18 сентября 2017 г.) от Jameson Miller (jamill).
(Объединено с Junio C Hamano - gitster - в коммите 075bc9c, 29 сентября 2017 г.)

Улучшить производительность состояния git status --ignored

Улучшите производительность логики перечисления каталогов, когда она хочет перечислить непустые игнорируемые каталоги. Чтобы показать непустые игнорируемые каталоги, существующая логика будет рекурсивно перебирать все содержимое игнорируемого каталога.
Это изменение вводит оптимизацию, чтобы прекратить итерацию по содержимому, как только он находит первый файл. Это может значительно улучшить производительность "git status --ignored" в репозиториях с большим количеством файлов в игнорируемых каталогах.

Для примера разницы производительности в репозитории с 196 000 файлов в 400 игнорируемых каталогах:

| Command                    |  Time (s) |
| -------------------------- | --------- |
| git status                 |   1.2     |
| git status --ignored (old) |   3.9     |
| git status --ignored (new) |   1.4     |

Для большего улучшения (см. Git 2.17, Q2 2018) смотрите этот ответ.

Ответ 8

Проблема для меня заключалась в том, что на моем локальном жестком диске было клонировано много разных репозиториев, и чем больше у вас репозиториев, тем больше времени потребуется для запуска таких команд, как git status.

Я просто удалил много репозиториев, которые мне больше не нужны, и мой git-статус изменился с 1 минуты до 5 секунд.

Я не вижу никаких ответов, похожих на это здесь.

Ответ 9

Запуск git fsck решил эту проблему для меня в прошлом.

Ответ 10

В моем случае медленность была вызвана запуском git status как другого пользователя от владельца файлов в проекте.

Пока это не применимо во всех случаях, простой трюк chown для вашего текущего пользователя может сделать трюк.

Ответ 11

В более старых версиях git есть проблема с производительностью git status - для получения дополнительной информации см. Способы улучшения производительности git status.

У git 2.13 есть 1 исправление и еще 2.17. я перешел с 2,7 на 2,23, и это решило медленный статус. В ближайшее время запланировано еще одно улучшение.

Ответ 12

Попробуйте начать с нового клона вашей проверки.

git clone myrepo mynewrepo

а затем выполните git статус в mynewrepo.

В качестве альтернативы, и если вы смелее, очистите мусор от существующего заказа.

git clean -dfx

Это позволяет избежать git для сканирования некоторого (возможно большого) набора игнорируемых или не проверенных файлов.