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
Drew

Відповіді:


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 сек

2
git config --global core.fscache trueнічого не зробив для мене; проте git config core.fscache trueзробив фокус. Відповідно до цього , це тому, що core.fscache - це параметр для кожного репо.
Девід Мерріман,

2
@DavidMerriman Коментар "per repo" просто вказує, що ви можете змінити цей параметр на окремих репо. (Що стосується всіх налаштувань, тому я не знаю, чому це взагалі згадується.) Коментар не означає, що fscache він працює лише як параметр репо. Загальні налаштування застосовуються до всіх репозиторіїв на машині, якщо вони не замінені параметрами репо.
shoelzer

37

Рішення для повільності на Vista або 7, схоже, працює за допомогою Git Bash Run as administrator(або відключає UAC для ярлика 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 = '$' і перевірте швидкість своїх операцій.


Дякую! Це виявилося моєю проблемою в Windows XP. Див stackoverflow.com/q/5851611/200688
AndyL

2
Ви , ймовірно , може дозволити __git_ps1активним, якщо відключити SHOWDIRTYSTATE і / або SHOWUNTRACKEDFILES параметрів см stackoverflow.com/a/4203968/321973
Tobias Kienzler

Це було все, що мені знадобилося в Windows 7. Особливо пощастило, оскільки ця машина заблокована без адміністративних пільг!
Ефір

12

Спробував майже всі поради тут (включаючи той, що містився в моїй іншій відповіді) на новій машині, але вони не спрацювали, Git все ще повільно, як біс.

Потім я подивився програмне забезпечення для сканування вірусів (яке було попередньо встановлено): I сканування вимкнув сканування McAfee Security Center в режимі реального часу , і presto: git зараз швидко палить! Час, необхідний для "git svn rebase", зменшився з 30-х до 5-ти (!).

Сподіваюся, це корисно для інших людей, які все ще мають проблеми з повільним Git у Windows, я втратив години, розгадуючи це.


4
Мій Git Bash також починає повільно раніше, після того, як я додаю весь шлях встановлення git до шляху виключення Avast! Антивірусний пакет, 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
Мережеве з’єднання спрацювало і у мене. Цікаво, яке це стосується підключення до мережі. І дивно, це прекрасно працює в моїй домашній мережі, але відмовляється працювати в моїй офісній мережі.
Сарат

Це виправило мою проблему з Windows 7 Professional 64-bit на абсолютно новому 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

Альтернативою возитися з UAC для Windows 7 може бути встановлення 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 є чи робить. Ця сторінка містить різні попередження про погані речі, які можуть трапитися, якщо її вимкнути, до чого, мабуть, слід поставитися серйозно.

РЕДАГУВАТИ: У коментарі нижче вказано, що я неправильно зрозумів це (посилання має правильний шлях). Зараз це виправлено. Вибачте за людей, чиї реєстри я зруйнував :)


За замовчуванням для шахти встановлено значення 2. Все ще досить повільно.
imanuelcostigan

@imanuelc: за іронією долі, у мене теж зараз (на новому комп’ютері), і це також повільно.
jwg

2
Це неправильно. Його слід змінити з 2 на 4. 2 означає автозапуск. 4 означає інвалід.
richb

1

Я просто якийсь час усував це, і мені було важко визначити джерело проблеми. Врешті-решт я виявив дві речі, які мали значний вплив:

  • Вимкнення служби пошуку Windows. Це суттєво вплинуло на продуктивність.
  • Закриття розширень Git. Відкриття вікна перегляду Git Extensions у фоновому режимі призвело до збільшення часу виконання команди Cygwin git на, здавалося б, випадковий коефіцієнт приблизно до 10.

0

Проблема тут може бути у bash-завершенні, якщо це ввімкнено, що в Windows досить повільніше, ніж Linux.

Спробуйте встановити для змінної PS1 щось просто, наприклад, "$", і переконайтеся, що це пришвидшує процес. Якщо це сталося, майте на увазі, що в нещодавніх версіях git-версій було здійснено деякі оптимізації для завершення bash. Можливо, вам потрібно оновити.


1
Я працюю над абсолютно новою версією кровотечі (див. Мої коментарі до відповіді VonC вище). Але я спробую це зробити.
Кевін Л.

1.7.0.2 в цьому контексті не обов’язково є найсучаснішим. Оптимізація, про яку я кажу, відбулася в upstream-git. Я не впевнений, чи брали вони участь у випуску Git для Windows 1.7.0.2 чи ні.
kusma

0

Це спрацювало для мене. Не сподівайтесь, що це буде універсальне рішення.

Перевірте змінну середовища $ HOME у bash та windows. Якщо він вказує на обліковий запис користувача, перевірте профіль / дозволи користувача Windows. Змініть або обліковий запис користувача, або $ HOME відповідно.


6
Чи не могли б Ви трохи детальніше розказати про цей зловісний профіль / дозволи?
Тобіас Кінцлер,

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 швидко працював.


0

Найкраще рішення - це працювати як адміністратор, як зазначено. Однак ще одним варіантом прискорення стану git , принаймні, є trustctime = false . До цього статус git займав близько 30 секунд, а після цього це та сама сума, яка відображається у вихідних даних - знадобилося X секунд, щоб ...


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-complete.bash або погравши в трюки з core.filemode.

Що стосується інтеграції Visual Studio: це відкритий код. Нечесно очікувати, що інші будуть працювати на вас безкоштовно.

Мені також досить смішно не задавати питання у списку розсилки msysGit, але зараз я відступлюся.


5
Не слід допускати загоряння на StackOverflow. Будь ласка, спробуйте зберегти дискурс більш цивілізованим
Форд

1
Це смішно. Мій коментар був єдиним коментарем із конкретною технічною інформацією. Пропозиція допомогти у вирішенні проблеми все ще відкрита, розумієте? І, звичайно, мене дуже засмучує те, що питання було порушено тут, щодо stackoverflow, який я не відстежую і на який мені повинні були вказати інші. Я хотів би почути про цю проблему безпосередньо. Я не знаю про вас, але я вважаю несправедливим, коли про вихідний проект навіть не повідомляють про проблеми.
Dscho

Через два роки я згоден. Я був занадто суворим. Вибач, Дшо. Списки розсилки розробника git дуже корисні.
Форд

2
@Dscho, ти повинен розуміти, що люди часто спочатку публікують тут повідомлення, оскільки вони хочуть перевірити, чи не існує якоїсь проблеми з конфігурацією чи платформою, що не є помилкою в Git, що спричиняє їх проблему.
jwg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.