Git Bash очень медленно работает на Windows 7 x64 - PullRequest
402 голосов
/ 19 декабря 2010

Я использовал Git на Windows и Ubuntu во время разработки небольшого проекта, часто переключаясь между ними.Проблема в том, что Git Bash постоянно становится медленным.

Когда я говорю медленно, я имею в виду, что выполнение cd занимает от 8 до 25 секунд, а выполнение команд git занимает от 5-20 секунд, а ls иногда может занять до 30 секунд.Излишне говорить, что это не весело, не говоря уже о непродуктивности.Я знаю, что Git работает медленнее в Windows, но это смешно.

Единственное решение, которое сработало - временно - для меня, - отключить сетевое соединение (как предложено в в этом ответе ), запустите Git Bash, а затем снова подключитесь.Иногда он продолжает работать быстро в течение нескольких дней после этого, но производительность всегда падает в конце концов.Я пролистал дискуссионную группу msysgit, переполнение стека, список ошибок msysgit и т. Д. В течение нескольких недель, но я не смог найти решения, которые работают.

Пока что ямы попробовали:

  • Добавление папок Git & project в список исключений антивирусного сканера
  • Полное отключение моего антивирусного сканера (Kaspersky IS 2011)
  • Обеспечение того, чтобы Outlook не былработает (Outlook 2007)
  • Завершение работы всех других приложений
  • Запуск Git Bash от имени администратора
  • Отключение сетевого подключения, запуск Git Bash и сохранение соединения отключенным
  • Отключение сетевого подключения, запуск Git Bash, повторное включение подключения (работает только изредка)
  • Запуск git gc
  • И комбинации выше

Я сделалПрочитайте, что несколько человек успешно отключили завершение Bash, но в идеале я бы хотел сохранить это активнымВерсия msysgit - 1.7.3.1-preview20101002, операционная система - Windows 7 x64.Запуск того же самого в Linux, как и ожидалось, молниеносно.Я бы использовал исключительно Linux, но мне тоже нужно запускать что-то в Windows (некоторые приложения, тестирование и т. Д.).

Кто-нибудь сталкивался с подобной проблемой?Если да, то какова была основная проблема и каково было решение (если есть)?

Это выходит за рамки только репозиториев Git, но просто для справки, репозитории, с которыми я использовал Git, были довольно маленькими: Максимум ~ 4-50 файлов.

Ответы [ 23 ]

0 голосов
/ 12 мая 2016

В моем случае ярлык Git Bash был установлен на Start in:%HOMEDRIVE%%HOMEPATH% (это можно проверить, щелкнув правой кнопкой мыши Git Bash и выбрав свойства).Это был сетевой диск.

Решение состоит в том, чтобы указать на %HOME%.Если у вас его нет, вы можете установить его в переменных окружения, и теперь Git Bash должен работать молниеносно.

0 голосов
/ 23 октября 2018

Как многие говорили, это связано с тем, что stash является сценарием оболочки в Windows, но, начиная с Git 2.18.0, установщик Windows имеет опцию для экспериментальной функции гораздо более быстрой (~ 90%) встроенной версии. заначки - https://github.com/git-for-windows/build-extra/pull/203.

0 голосов
/ 08 февраля 2016

У меня также была проблема с медлительностью git PS1, хотя долгое время я думал, что это проблема с размером базы данных (большой репозиторий) и пробовал различные git gc трюки, и искал другие причины, такие же, как вы. Однако, в моем случае, проблема была в этой строке:

function ps1_gitify
{
   status=$(git status 2>/dev/null )      # <--------------------
   if [[ $status =~ "fatal: Not a git repository" ]]
   then
       echo ""
   else
       echo "$(ps1_git_branch_name)  $(ps1_git_get_sha)"
  fi
}

Выполнение git status для каждой строки состояния командной строки было медленным. Уч. Это было то, что я написал от руки. Я увидел, что это проблема, когда я попробовал

export PS1='$'

как упомянуто в одном ответе здесь. Командная строка была молниеносной.

Теперь я использую это:

function we_are_in_git_work_tree
{
    git rev-parse --is-inside-work-tree &> /dev/null
}

function ps1_gitify
{
    if ! we_are_in_git_work_tree
    then
    ...

Из поста переполнения стека PS1 строка с текущей веткой git и цветами , и она работает нормально. Опять быстрая командная строка Git.

...