Статус Git занимает много времени для завершения



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

584   11  

11 ответов:

вы пробовали git gc? Это очищает мусор из репозитория Git.

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

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

я переместил вторичное РЕПО git куда-то еще, и теперь скорость быстрая!

вы пробовали переупаковка? git-repack.

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

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

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

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

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

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

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

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

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

посмотреть commit 5aaa7fd (18 Sep 2017) by Джеймсон Миллер (jamill).
(слитый Junio C Hamano--gitster-- на commit 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), см. ответ.

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

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

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

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

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

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

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

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

git clone myrepo mynewrepo

а затем сделать git статус в mynewrepo.

в качестве альтернативы, и если вы смелее, Очистить мусор от существующей проверки.

git clean -dfx

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

Comments

    Ничего не найдено.