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