Msysgit Bash ужасно медленно в Windows 7
Я люблю git и использую его на OS X почти постоянно дома. На работе мы используем svn в Windows, но хотим перейти на git, как только инструменты полностью созреют (не только TortoiseGit, но и что-то похожее на действительно хорошую интеграцию Visual Studio, предоставляемую VisualSVN). Но я отвлекся...
Я недавно установил msysgit на мой компьютер с Windows 7, и при использовании включенной версии bash он ужасно медленный. И не только операции с git; clear
занимает около пяти секунд. Aaaah!
Кто-нибудь сталкивался с подобной проблемой?
Редактировать: Похоже, что msysgit не очень хорошо работает с UAC и может быть просто крошечным упущением дизайна, возникающим в результате разработки на XP или под управлением Vista или 7 с отключенным UAC; начиная с Git Bash Run as administrator
результаты с молниеносной скоростью я вижу с OS X (или на 7 после запуска Git Bash без сетевого подключения - см. ответ @Gauthier).
Редактировать 2: АХ ХА! Смотри мой ответ.
19 ответов
Решением для медлительности в Vista или 7, кажется, является запуск Git Bash с использованием Run as administrator
(или отключение UAC для ярлыка Git Bash... или полное отключение UAC). Разница между днем и ночью, и использование git на 7 снова удивительно.
Похоже, это связано с известной проблемой, и, как я предположил, XP как среда разработки для msysgit частично ответственна.
Вы можете значительно ускорить Git в Windows, запустив три команды для настройки некоторых параметров конфигурации:
git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256
Заметки:
core.preloadindex
выполняет операции файловой системы параллельно, чтобы скрыть задержку (обновление: включено в git 2.1 по умолчанию)core.fscache
устраняет проблемы с UAC, поэтому вам не нужно запускать Git от имени администратора (обновление: по умолчанию включено в Git для Windows 2.8)gc.auto
минимизирует количество файлов в.git/
Для меня проблема заключалась в использовании __git_ps1 в командной строке - я думаю, из-за медленного доступа к диску в msysgit.
Решением было удалить $(__git_ps1) из строк PS1=... в /etc/profile
Быстрый тест, если это решение применимо: в оболочке git введите export PS1='$ ' и проверьте скорость ваших операций.
Перепробовал почти все советы здесь (включая один из моего другого ответа) на новой машине, но они не сработали, Git все еще медленный, как ад.
Затем я взглянул на программу для сканирования вирусов (которая была предварительно установлена): я отключил сканирование в реальном времени McAfee Security Center и сказал: git теперь работает быстро! Время, необходимое для "git svn rebase", уменьшилось с 30 до 5 секунд (!).
Я надеюсь, что это полезно для других людей, у которых все еще есть проблемы с медленным Git на Windows, я потратил часы, чтобы понять это.
Увы, "Запуск от имени администратора" у меня не сработал, но, как обнаружил Кевин Л., отключил сетевой адаптер, запустил git bash, а затем снова подключился. Поэтому я обернул это в пакетный скрипт и поместил ярлык для него в меню "Пуск", помеченный для запуска от имени администратора:
netsh interface set interface "Local Area Connection" DISABLED
cd "%USERPROFILE%\Documents\Visual Studio 2010\Projects"
start cmd /c ""C:\Program Files\Git\bin\sh.exe" --login -i"
netsh interface set interface "Local Area Connection" ENABLED
Работает, пока я помню, что моя сеть на мгновение отключается.
(Win 7 Professional SP1, Git версия 1.7.8-preview20111206)
Мой коллега имел такое поведение всякий раз, когда Outlook работал. Пытаясь убить внешний вид и протестировать снова.
Вы также можете попробовать проверить:
- без подключения к какой-либо сети,
- без запуска антивируса,
- без какой-либо другой программы.
Мы обнаружили, что при работе с определенными учетными записями пользователей отдельные экземпляры git.exe блокируются при вызове WaitForSingleObject()
Таким образом, только одна операция git.exe может эффективно выполняться одновременно. Изменение учетной записи пользователя обошло эту проблему.
Подробности здесь: /questions/35104104/git-shexe-protsess-razvetvleniya-problema-na-windows-xp-medlenno/35104107#35104107
У меня есть MacAffee, и я говорю ему об исключении каталога.git и всех подкаталогов из сканирования в реальном времени, что решает проблему производительности.
Альтернативой возиться с UAC в Windows 7 может быть установка mysysgit за пределами вашей папки Program Files. Например, вместо "C:\Program Files (x86)\Git", попробуйте установить в "C:\git"
Я попытался возиться с "Запуск от имени администратора" и элементами управления UAC, но безрезультатно, но сдался и начал новую установку. Раньше я получал максимум 15 КБ / с, но сейчас он превышает 60 КБ / с.
Я только что решил эту проблему некоторое время, и мне было трудно определить источник проблемы. В конце концов я обнаружил две вещи, которые оказали драматическое влияние:
- Отключение службы поиска Windows. Это оказало драматическое влияние на производительность.
- Закрытие Git Extensions. Открытое в фоновом режиме окно просмотра расширений Git приводило к увеличению времени выполнения команды git Cygwin примерно на 10%.
Если отключение UAC не улучшает производительность, попробуйте отключить драйвер luafv. Это сработало для меня после того, как я попробовал почти все на этой странице и пару похожих вопросов. Git прошел путь от необычайно медленного до довольно приличного.
Откройте "regedit" и найдите раздел реестра.
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv
Изменить значение Start
от 2 до 4.
Я нашел подробности о том, как отключить luafv
здесь Обратите внимание, что я лично понятия не имею, что luafv
есть или делает. На этой странице содержатся различные предупреждения о плохих вещах, которые могут произойти, если вы отключите его, что, вероятно, следует воспринимать всерьез.
РЕДАКТИРОВАТЬ: комментарий ниже указал, что я понял это неправильно (ссылка имеет это правильно). Это исправлено сейчас. Извините людей, чьи реестры я разгромил:)
Как показано в этом выпуске, работа с отключенной виртуализацией UAC (нет необходимости полностью отключать UAC) имеет большое значение.
В этом посте объясняется, как его отключить (см. В нижней части поста только один параметр реестра).
В одном (большом) репозитории SVN, к которому я подключаюсь, внесение только что указанного изменения сократило время, необходимое для "git svn rebase", с 15 до 5 с, что является улучшением в 3 раза.
Проблема здесь может заключаться в завершении bash, если оно включено, что немного медленнее в Windows, чем в Linux.
Попробуйте установить переменную PS1 во что-то простое, например, "$ ", и посмотрите, не ускоряет ли это процесс. Если это произойдет, имейте в виду, что в недавнем выпуске git-версий были некоторые оптимизации для завершения bash. Возможно, вам нужно обновить.
Лучшее решение состоит в том, чтобы работать от имени администратора, как указано. Однако другой способ сделать состояние git быстрым, по крайней мере, это trustctime = false. До этого git-статус занимал около 30 секунд, и после этого он равен той же величине, которая отображается в выходных данных - потребовалось X секунд, чтобы...
Вы также можете значительно повысить производительность, изменив следующую конфигурацию git:
git config --global status.submoduleSummary false
Когда работает простой git status
Команда на Windows 7 x64, мой компьютер работал более 30 секунд. После того, как эта опция была определена, команда немедленно.
Активация собственной трассировки Git, как объяснялось на следующей странице, помогла мне найти источник проблемы, которая может отличаться в вашей установке: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow
Вы можете попробовать удалить msysgit, перезапустить Windows, установить последнюю версию msysgit. Похоже, это помогло мне. Я нашел это предложение здесь:
/questions/30607602/git-bash-ochen-medlenno-rabotaet-na-windows-7-x64/30607615#30607615
РЕДАКТИРОВАТЬ
PS У меня уже было отключено UAC до того, как я столкнулся с медленными проблемами с Git, поэтому я не знаю, требуется ли отключение UAC или нет, чтобы Git работал быстро.
Это сработало для меня. Не ожидайте, что это будет одно решение для всех.
Проверьте переменную окружения $HOME в bash и windows. Если он указывает на учетную запись пользователя, проверьте профиль / разрешения Windows пользователя. Измените либо учетную запись пользователя, либо $HOME соответственно.
Я столкнулся с той же проблемой при запуске git для Windows (msysgit) на Windows 7 x64 в качестве учетной записи с ограниченными правами в течение достаточно долгого времени. Из того, что я читал здесь и в других местах, общей темой, похоже, является отсутствие административных привилегий и / или UAC. Поскольку UAC в моей системе отключен, объяснение того, что оно пытается что-то записать / удалить в каталоге программных файлов, имеет для меня самый смысл.
В любом случае, я решил свою проблему, установив переносную версию git 1.8 с zipinstaller. Обратите внимание, что для работы zipinstaller мне пришлось распаковать дистрибутивный файл.7z и упаковать его как zip. Мне также пришлось вручную добавить этот каталог в мой системный путь.
Производительность в порядке сейчас. Несмотря на то, что он установлен в каталоге Program Files (x86), для которого у меня нет разрешений как для ограниченного пользователя, он, похоже, не страдает от той же проблемы. Я приписываю это либо факту, что портативная версия немного более консервативна в том, что она пишет / удаляет файлы, что, вероятно, имеет место, либо обновлению с 1.7 до 1.8. Я не собираюсь пытаться определить, какая из них является причиной, достаточно сказать, что теперь это работает намного лучше.
Вероятно, дело в подсказке, которая анализирует ваш Git-репозиторий. Вы можете проверить, выполнив команду "очистить" где-нибудь за пределами Git-репозитория. И вы можете ускорить его, либо установив патч git-complete.bash, либо выполнив трюки с core.filemode.
Что касается интеграции Visual Studio: это с открытым исходным кодом. Несправедливо ожидать, что другие будут работать на вас бесплатно.
Я также нахожу довольно забавным не задавать вопрос в списке рассылки msysGit, но теперь я отвлекся.