Msysgit bash ужасно медленный в Windows 7

84

Я люблю git и постоянно использую его в OS X дома. На работе мы используем svn в Windows, но хотим перейти на git, как только инструменты полностью созреют (не только TortoiseGit , но и что-то вроде действительно хорошей интеграции Visual Studio, предоставляемой VisualSVN ). Но я отвлекся ...

Я недавно установил msysgit на свой компьютер с Windows 7, и при использовании включенной версии bash он ужасно медленный. И не только операции git; clearзанимает около пяти секунд . АААА!

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


Изменить : похоже, что msysgit не очень хорошо работает с UAC и может быть просто крошечным упущением в дизайне, возникшим в результате разработки на XP или запуска Vista или 7 с отключенным UAC; запуск Git Bash с использованием Run as administratorрезультатов с молниеносной скоростью, которую я вижу с OS X (или на 7 после запуска Git Bash без сетевого подключения - см. ответ @Gauthier).

Изменить 2 : А-ХА! Смотрите мой ответ.

Кевин Л.
источник
Не медленнее на 5 секунд, нет. Он будет медленнее, но быстрее, чем версия Cygwin.
Ян Рамин,
@theatrus: Я только что использовал секундомер. В среднем было 3,8 секунды. Итак, вы правы, но что-то по-прежнему не так.
Кевин Л.
Еще одно замедление работы msysgit - это старая версия OpenSSH, задокументированная здесь darrell.mozingo.net/2011/09/29/…
JodaStephen
См. Вики-страницу msysgit: github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow
Дрю Ноукс,
1
возможный дубликат Git / Bash работает очень медленно в Windows 7 x64
Джошуа Тейлор

Ответы:

54

Вы можете значительно ускорить 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 /

шнурок
источник
Теперь это должен быть принятый ответ. Работает как шарм!
krlmlr
8
У меня это не работает. Мой git bash все еще задерживается на 1-2 секунды после того, как я даю команду.
Jaskey
Сработало для меня как шарм; снизил мой статус git на большом репо с 13 до 0,7 с
noelob
2
git config --global core.fscache trueничего не сделал для меня; однако git config core.fscache trueдобился своего. Согласно этому , это потому, что core.fscache - это настройка для каждого репо.
Дэвид Мерриман
2
@DavidMerriman Комментарий «для репо» просто заявляет, что вы можете изменить этот параметр для отдельных репо. (Что верно для всех настроек, поэтому я не знаю, почему это вообще упоминается.) Комментарий не означает, что он работает fscache только как настройка для каждого репо. Глобальные настройки применяются ко всем репозиториям на машине, если они не переопределены настройками репо.
shoelzer
37

Решение медлительность на Vista , или 7 , кажется, работает Git Bash , используя Run as administrator(или отключение контроля учетных записей для Git Bash ярлык ... или отключить UAC полностью ). Разница в том, что день и ночь, и использовать git на 7 снова здорово.

Похоже, это связано с известной проблемой, и, как я предполагал, частично ответственна XP как среда разработки для msysgit .

Кевин Л.
источник
Хороший намек (пусть даже и неумышленный :)). Запуск "git svn clone" в Windows 2008 R2 с версией 1.7.4 был ужасно медленным для меня (в SVN более 5000 коммитов, и потребовались недели, чтобы получить половину из них) ... Вы подали мне идею попробовать это в «родной» среде, на XP, и на самом деле очень быстро. Благодаря!
bdrajer
1
Я отключил UAC и попытался запустить от имени администратора, и все же каждая команда, которую я ввожу в Git Bash, запускается примерно за 5 секунд (даже lsв практически пустом каталоге)
Робин Уинслоу,
4
Вместо этого у меня сработал ответ на этот вопрос: stackoverflow.com/questions/4485059/…
Робин Уинслоу,
Перенос репозиториев в несистемный раздел также показал значительное повышение производительности моей команды и предотвратил случайные проблемы с невозможностью создания файла при оформлении заказа.
Лоуренс
1
я пробовал много решений .. этот (запущенный от имени администратора) наконец-то сработал для меня .. теперь мой git снова молниеносный .. спасибо .. :)
AweSIM
14

Для меня проблема заключалась в использовании __git_ps1 в приглашении оболочки - я думаю, из-за медленного доступа к диску в msysgit.

Решением было удалить $ (__ git_ps1) из строк PS1 = ... в / etc / profile

Быстрая проверка, применимо ли это решение: в оболочке git введите export PS1 = '$' и проверьте скорость ваших операций.

chrisxxyy
источник
Благодаря! Это оказалось моей проблемой в Windows XP. См stackoverflow.com/q/5851611/200688
AndyL
2
Вы , вероятно , может позволить __git_ps1активным, если отключить SHOWDIRTYSTATE и / или SHOWUNTRACKEDFILES параметров см stackoverflow.com/a/4203968/321973
Tobias Kienzler
Это все, что мне потребовалось для Windows 7. Особенно повезло, поскольку эта машина заблокирована без прав администратора!
Воздух
12

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

Затем я взглянул на программное обеспечение для поиска вирусов (которое было предварительно установлено): я отключил сканирование в реальном времени McAfee Security Center , и теперь presto: git работает быстро! Время, необходимое для "git svn rebase", упало с 30 до 5 (!).

Я надеюсь, что это поможет другим людям, у которых все еще есть проблемы с медленным Git в Windows, я потерял часы, выясняя это.

Том Де Леу
источник
4
Мой Git Bash также запускается медленно раньше, после того как я добавляю весь путь установки git к пути исключения Avast! Anti-Virus Suite, git bash запускается менее 0,5 с
zhxchen17
Это был ответ для меня !! Я использую AVG Free. Я просто отключил его на 10 минут, внезапно вееэрррйыыы вялый баш стал молниеносным.
Mörre
Для тех, кто использует Защитник Windows, вы можете исключить папку или процесс. См support.microsoft.com/en-us/help/4028485/...
Ehtesh Чоудхури
9

Увы, «Запуск от имени администратора» у меня не сработал, но, как обнаружил Кевин Л., отключение сетевого адаптера, запуск 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)

Дэниел Хьюм
источник
5

У моего коллеги было такое поведение при запуске Outlook. Пытаться убить прогноз и снова протестировать.

Вы также можете попробовать протестировать:

  • без подключения к какой-либо сети,
  • без запущенного антивируса,
  • без работы какой-либо другой программы.
Готье
источник
3
Ни Outlook, ни антивирус, похоже, не имеют никакого эффекта, но если я отключу сетевое соединение, а затем запустите git, это будет молниеносно (читай: «Unix»), даже после того, как я снова подключусь. Интересно ...
Кевин Л.
Ага. И git bash остается быстрым (пока я не закрою его и не открою другой экземпляр).
Кевин Л.
2
Сетевое подключение у меня тоже работало. Интересно, какое это имеет отношение к сетевому подключению. И, как ни странно, он отлично работает в моей домашней сети, но отказывается работать в моей офисной сети.
Сарат
Это устранило мою проблему в 64-разрядной версии Windows 7 Professional на новом iMac. Ура!
longda
+1 антивирус, как предполагалось, был причиной в моей конкретной системе. windows 7 x64 ultimate. К сожалению, UAC (упомянутый в другом месте) не имел никакого значения. спасибо всем
MickyD
3

Мы обнаружили, что при работе с определенными учетными записями пользователей отдельные экземпляры git.exe блокируются при вызове WaitForSingleObject() , поэтому одновременно может эффективно выполняться только одна операция git.exe. Изменение учетной записи пользователя помогло обойти эту проблему.

Подробности здесь: https://stackoverflow.com/a/13054022

Мэтью Скелтон
источник
3

У меня есть MacAffee, и я говорю ему исключить каталог .git и все подкаталоги из сканирования в реальном времени, и это решает проблему с производительностью.

Алекс Браун
источник
1
Можно ли исключить весь жесткий диск? ;-).
Питер - Восстановите Монику
1

Как найдено в этом выпуске , работа с отключенной виртуализацией UAC (нет необходимости полностью отключать UAC) имеет большое значение.

Эта почта объясняется, как его отключить (см. Внизу сообщения, только один параметр реестра).

В одном (большом) репозитории SVN, к которому я подключаюсь, внесение только вышеуказанного изменения снизило время, необходимое для "git svn rebase", с 15 до 5 секунд, что в 3 раза больше.

Том Де Леу
источник
Эта проблема (трекер) закрыта, новая проблема, связанная с этим: github.com/msysgit/git/issues/94
childno͡.de
1

Альтернативой возиться с Windows 7 UAC может быть установка mysysgit вне папки Program Files. Например, вместо «C: \ Program Files (x86) \ Git» попробуйте установить в «C: \ git»

Я безрезультатно пытался возиться с элементами управления «Запуск от имени администратора» и UAC, но сдался и начал новую установку. Раньше я получал максимум 15 КБ / с, но теперь он превышает 60 КБ / с.

Фрэнк Инь
источник
1

Если отключение UAC не улучшает производительность, попробуйте отключить драйвер luafv. Это сработало для меня после того, как я попробовал почти все на этой странице и пару похожих вопросов. Git превратился из необычно медленного в довольно приличный.

Откройте regedit и найдите раздел реестра.

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv

Измените значение Start с 2 на 4.

Я нашел подробности о том, как отключить luafv здесь . Обратите внимание, что я лично не знаю, чтоluafv есть или делает. На этой странице даются различные предупреждения о плохих вещах, которые могут произойти, если вы ее выключите, к чему, вероятно, следует отнестись серьезно.

РЕДАКТИРОВАТЬ: в комментарии ниже указано, что я понял это неправильно (ссылка указывает на правильную сторону). Сейчас это исправлено. Извините людей, чьи реестры я разгромил :)

jwg
источник
По умолчанию у меня установлено значение 2. Все еще довольно медленно.
imanuelcostigan
@imanuelc: по иронии судьбы, мой тоже сейчас (на новом компьютере), и он тоже медленный.
jwg
2
Это неверно. Его надо поменять с 2 на 4. 2 означает автозапуск. 4 означает отключено.
richb
1

Я просто устранял это какое-то время, и мне было сложно определить источник проблемы. В итоге я обнаружил две вещи, которые оказали огромное влияние:

  • Отключение службы поиска Windows. Это сильно повлияло на производительность.
  • Закрытие расширений Git. Открытие окна Git Extensions Browse в фоновом режиме приводило к увеличению времени выполнения команды Cygwin git, казалось бы, случайным образом примерно до 10.
bjos
источник
0

Проблема здесь может заключаться в завершении bash, если оно включено, что немного медленнее в Windows, чем в Linux.

Попробуйте установить для переменной PS1 что-нибудь простое, например «$», и посмотрите, ускорит ли это процесс. Если это так, имейте в виду, что в последних версиях git-версий были некоторые оптимизации для завершения bash. Возможно, вам нужно обновить.

кусма
источник
1
Я использую новейшую новейшую версию (см. Мои комментарии к ответу VonC выше). Но я попробую.
Кевин Л.
1.7.0.2 не обязательно является передовым в этом контексте. Оптимизация, о которой я говорю, произошла в upstream-git. Я не уверен, были ли они в выпуске 1.7.0.2 Git для Windows или нет.
kusma
0

Это сработало для меня. Не ожидайте, что это будет универсальное решение.

Проверьте переменную окружения $ HOME в bash и windows. Если он указывает на учетную запись пользователя, проверьте профиль / разрешения Windows пользователя. Измените соответственно учетную запись пользователя или $ HOME.

Дипак
источник
6
Не могли бы вы немного подробнее рассказать об этом зловещем профиле / разрешениях?
Tobias Kienzler
0

Я столкнулся с той же проблемой при запуске git для Windows (msysgit) в Windows 7 x64 в качестве ограниченной учетной записи в течение некоторого времени. Из того, что я читал здесь и в других местах, общей темой, похоже, является отсутствие административных привилегий и / или UAC. Поскольку в моей системе UAC отключен, объяснение, что он пытается что-то записать / удалить в каталоге программных файлов, имеет для меня наибольший смысл.

В любом случае я решил свою проблему, установив переносную версию git 1.8 с помощью zipinstaller. Обратите внимание, что мне пришлось распаковать файл дистрибутива .7z и перепаковать его как zip, чтобы программа zipinstaller работала. Мне также пришлось вручную добавить этот каталог к ​​моему системному пути.

Спектакль сейчас в порядке. Несмотря на то, что он установлен в каталоге Program Files (x86), для которого у меня нет разрешений как у ограниченного пользователя, похоже, что он не страдает той же проблемой. Я приписываю это либо тому факту, что портативная версия немного более консервативна в том, где она записывает / удаляет файлы, что, вероятно, так и есть, либо обновлению с 1.7 до 1.8. Я не буду пытаться определить, какая из них является причиной, достаточно сказать, что сейчас она работает намного лучше.

Двоичный файл
источник
0

Вы можете попробовать удалить msysgit, перезапустить Windows, установить последнюю версию msysgit. Похоже, это помогло мне. Я нашел это предложение здесь:

https://stackoverflow.com/a/4506192/1413941

РЕДАКТИРОВАТЬ

PS У меня уже был отключен UAC, прежде чем я столкнулся с медленными проблемами Git, поэтому я не знаю, требуется ли отключение UAC или нет, чтобы Git работал быстро.

Herr Grumps
источник
0

Как уже отмечалось, лучшим решением является запуск от имени администратора. Однако еще один вариант сделать git status быстрым, по крайней мере, - trustctime = false . До этого git status занимал около 30 секунд, а после этого то же количество, что и в выводе - потребовалось X секунд, чтобы ...

TS '
источник
0

Вы также можете существенно повысить производительность, изменив следующую конфигурацию 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- медленный

Оливье
источник
-4

Вероятно, дело в подсказке, которая анализирует ваш репозиторий Git. Вы можете протестировать, выполнив «очистку» где-нибудь вне репозитория Git. И вы можете ускорить его, исправив git-completion.bash или играя с core.filemode.

Что касается интеграции Visual Studio: это открытый исходный код. Несправедливо ожидать, что другие будут работать на вас бесплатно.

Я также считаю довольно забавным не задать вопрос в списке рассылки msysGit, но теперь я отвлекся.

Дщо
источник
5
Флейм на StackOverflow недопустим. Пожалуйста, постарайтесь, чтобы дискурс был более цивилизованным
форд
1
Это смешно. Мой комментарий был единственным комментарием с конкретной технической информацией. Вы знаете, что предложение о помощи в решении проблемы все еще остается в силе? И, конечно, я очень расстроен тем, что проблема была поднята здесь, в stackoverflow, который я не отслеживаю и на который мне пришлось указать другим. Я бы предпочел услышать об этом напрямую. Не знаю, как вы, но считаю несправедливым, когда исходный проект даже не уведомляется о проблемах.
Dscho
Два года спустя я согласен. Я был слишком резок. Извини, Дщо. Списки рассылки разработчиков git действительно полезны.
форд
2
@Dscho, вы должны понимать, что люди часто сначала пишут здесь, потому что хотят убедиться, что нет какой-либо проблемы с конфигурацией или платформой, которая не является ошибкой в ​​Git, вызывающей их проблему.
jwg