Msysgit bash est terriblement lent dans Windows 7

J’adore git et l’utilise sous OS X à peu près constamment chez moi. Au travail, nous utilisons svn sous Windows, mais nous souhaitons migrer vers git dès que les outils ont complètement mûri (pas seulement TortoiseGit , mais aussi quelque chose qui ressemble à la très belle intégration Visual Studio fournie par VisualSVN ). Mais je m’égare …

J’ai récemment installé msysgit sur mon ordinateur Windows 7, et lorsque vous utilisez la version incluse de bash, il est terriblement lent. Et pas seulement les opérations git; clear prend environ cinq secondes . AAAAH!

Quelqu’un a-t-il rencontré un problème similaire?


Edit : Il semble que msysgit ne fonctionne pas bien avec UAC et pourrait être une minuscule erreur de conception résultant du développement sur XP ou de l’exécution de Vista ou 7 avec UAC désactivé; démarrer Git Bash en utilisant Run as administrator donne la vitesse de l’éclair avec OS X (ou 7 après le démarrage de Git Bash avec une connexion réseau – voir la réponse de @Gauthier).

Edit 2 : AH HA! Voir ma réponse

Vous pouvez considérablement accélérer git sous Windows en exécutant trois commandes pour définir certaines options de configuration:

 $ git config --global core.preloadindex true $ git config --global core.fscache true $ git config --global gc.auto 256 

Remarques:

  • core.preloadindex fait des opérations de système de fichiers en parallèle pour cacher la latence (mise à jour: activée par défaut dans git 2.1)

  • core.fscache corrige les problèmes UAC, vous n’avez donc pas besoin de lancer git en tant qu’administrateur (update: activé par défaut dans Git pour Windows 2.8)

  • gc.auto minimise le nombre de fichiers en .git /

La solution pour la lenteur sur Vista ou 7 semble exécuter Git Bash en utilisant Run as administrator (ou en désactivant UAC pour le raccourci Git Bash … ou en désactivant complètement UAC). La différence est la nuit et le jour et utiliser git sur 7 est encore une fois génial.

Cela semble être lié à un problème connu et, comme je l’ai supposé, XP comme environnement de développement pour msysgit est partiellement responsable.

Pour moi, le problème était l’utilisation de __git_ps1 dans l’invite du shell – je suppose qu’en raison de la lenteur de l’access au disque dans msysgit.

La solution consistait à supprimer $ (__ git_ps1) des lignes PS1 = … dans / etc / profile.

test rapide si cette solution s’applique: dans un shell git, tapez export PS1 = ‘$’ et vérifiez la vitesse de vos opérations.

Essayé à peu près tous les conseils ici (y compris celui de mon autre réponse) sur une nouvelle machine, mais ils n’ont pas fonctionné, Git toujours aussi lent que l’enfer.

Ensuite, j’ai regardé le logiciel virusscanning (qui était pré-installé): j’ai désactivé l’parsing en temps réel de McAfee Security Center , et hop: git est en train de briller rapidement maintenant! Le temps nécessaire pour “git svn rebase” est passé de 30s à 5s (!).

J’espère que cela aidera d’autres personnes qui ont encore des problèmes avec Git lent sous Windows, j’ai perdu des heures à comprendre.

Hélas, «Exécuter en tant qu’administrateur» n’a pas fonctionné pour moi – mais, comme l’a constaté Kevin L, en déconnectant la carte réseau, en lançant git bash, la reconnexion a bien fonctionné. Je l’ai donc enveloppé dans un script batch et y ai ajouté un raccourci dans le menu Démarrer, marqué comme étant admin:

 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 

Travaille un régal tant que je me souviens que mon réseau est momentanément coupé.

(Win 7 Professional SP1, version Git 1.7.8-preview20111206)

Un de mes collègues avait ce comportement chaque fois qu’Outlook était en cours d’exécution. Essayer de tuer des outlook et tester à nouveau.

Vous pouvez également essayer de tester:

  • sans connexion à un réseau,
  • sans antivirus en cours d’exécution,
  • sans aucun autre programme en cours d’exécution.

Nous avons constaté que, lors de l’exécution sur certains comptes d’utilisateur, les instances distinctes de git.exe bloquées lors d’un appel à WaitForSingleObject() , seule une seule opération git.exe pouvait être exécutée simultanément. La modification du compte d’utilisateur a contourné ce problème.

Détails ici: https://stackoverflow.com/a/13054022

J’ai MacAffee et je lui dis d’exclure le répertoire .git et tous les sous-répertoires de l’parsing en temps réel ont résolu le problème de performance.

Comme indiqué dans ce problème , l’exécution avec la virtualisation UAC désactivée (ce n’est pas nécessaire pour désactiver complètement l’UAC) fait toute la différence.

Cet article explique comment l’éteindre (voir le bas de l’article, un seul paramètre de registre).

Sur un (grand) référentiel SVN auquel je me connecte, le changement ci-dessus a permis de réduire le temps nécessaire pour “git svn rebase” de 15 à 5, une amélioration de facteur 3.

Une alternative à l’utilisation de Windows 7 UAC peut être d’installer mysysgit en dehors de votre dossier Program Files. Par exemple au lieu de “C: \ Program Files (x86) \ Git”, essayez d’installer dans “C: \ git”

J’ai essayé de sortingpoter les commandes «Exécuter en tant qu’administrateur» et UAC en vain, mais j’ai abandonné et j’ai recommencé une nouvelle installation. Je gagnais environ 15 Ko / s auparavant, mais je dépasse maintenant les 60 Kb / s.

Si la désactivation du contrôle de compte d’utilisateur n’améliore pas les performances, essayez de désactiver le pilote luafv. Cela a fonctionné pour moi après avoir essayé presque tout sur cette page et les quelques questions similaires. Git est passé d’une lenteur inouïe à une décente.

Ouvrez ‘regedit’ et trouvez la clé de registre

 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv 

Changez la valeur de Start de 2 à 4.

J’ai trouvé les détails sur la façon de désactiver luafv ici . Notez que je n’ai personnellement aucune idée de ce que luafv est ou fait. Cette page donne différents avertissements sur les mauvaises choses qui pourraient se produire si vous l’éteignez, ce que vous devriez probablement prendre au sérieux.

EDIT: Le commentaire ci-dessous a souligné que je ne l’avais pas bien compris (le lien est correct). Il est fixé maintenant. Désolé pour les personnes dont j’ai supprimé les registres 🙂

Je viens de résoudre ce problème depuis un moment et j’ai eu du mal à identifier la source du problème. Au final, j’ai trouvé deux choses qui ont eu un impact dramatique:

  • Désactiver le service de recherche Windows. Cela a eu un effet dramatique sur les performances.
  • Fermeture des extensions Git. En ouvrant la fenêtre de navigation de Git Extensions en arrière-plan, les temps d’exécution de la commande git de Cygwin ont augmenté d’un facteur apparemment aléatoire d’environ 10.

Le problème ici pourrait être la complétion de bash si elle est activée, ce qui est un peu plus lent sous Windows que sous Linux.

Essayez de régler la variable PS1 sur quelque chose de simple comme “$” et voyez si cela accélère les choses. Si c’est le cas, sachez qu’il y a eu quelques optimisations à la complétion de bash dans les versions récentes de ish git. Peut-être avez-vous besoin de mettre à niveau.

Cela a fonctionné pour moi. Ne vous attendez pas à ce que ce soit une solution unique.

Vérifiez la variable d’environnement $ HOME dans bash et windows. S’il pointe vers un compte d’utilisateur, vérifiez le profil / les permissions Windows de l’utilisateur. Modifiez le compte d’utilisateur ou le $ HOME en conséquence.

J’ai rencontré le même problème en exécutant git pour Windows (msysgit) sur Windows 7 x64 en tant que compte utilisateur limité pendant un certain temps. D’après ce que j’ai lu ici et ailleurs, le thème commun semble être le manque de privilèges administratifs et / ou de l’UAC. L’UAC étant désactivé sur mon système, l’explication qu’il tente d’écrire / supprimer quelque chose dans le répertoire des fichiers de programme me semble la plus logique.

En tout cas, j’ai résolu mon problème en installant la version portable de git 1.8 avec zipinstaller. Notez que j’ai dû décompresser le fichier de dissortingbution .7z et le réemballer en tant que fichier zip pour que zipinstaller fonctionne. J’ai également dû append manuellement ce répertoire à mon chemin système.

La performance va bien maintenant. Bien qu’il soit installé dans le répertoire Program Files (x86), pour lequel je ne dispose pas des permissions en tant qu’utilisateur limité, il ne semble pas rencontrer le même problème. J’atsortingbue ceci soit au fait que la version portable est un peu plus conservasortingce en ce qui concerne l’écriture / la suppression de fichiers, ce qui est probablement le cas, ou la mise à niveau de 1.7 à 1.8. Je ne vais pas essayer de déterminer laquelle est la raison, il suffit de dire que cela fonctionne beaucoup mieux maintenant.

Vous pouvez essayer de désinstaller msysgit, redémarrer Windows, installer la dernière version de msysgit. Cela m’a semblé faire l’affaire. J’ai trouvé cette suggestion ici:

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

MODIFIER

PS: UAC était déjà désactivé avant que je ne tombe sur des problèmes de Git, donc je ne sais pas si la désactivation de l’UAC est nécessaire ou non pour que Git se déroule rapidement.

La meilleure solution consiste à exécuter en tant qu’administrateur, comme indiqué. Cependant, trustctime = false est une autre option pour rendre le statut de git rapide. Avant que le statut git prenne environ 30 secondes et après c’est le même montant qui est montré dans la sortie – Cela a pris X secondes pour …

Vous pouvez également gagner un gain de performance important en modifiant la configuration git suivante:

 git config --global status.submoduleSummary false 

Lors de l’exécution de la commande git status simple sur Windows 7 x64, il a fallu plus de 30 secondes à mon ordinateur pour s’exécuter. Une fois cette option définie, la commande est immédiate.

Activer le propre suivi de Git comme expliqué dans la page suivante m’a aidé à trouver l’origine du problème, qui peut être différent dans votre installation: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- lent

C’est probablement une question de l’invite qui parsing votre repository Git. Vous pouvez tester en faisant “clear” quelque part en dehors d’un repository Git. Et vous pouvez l’accélérer soit en corrigeant git-completion.bash, soit en jouant à des sortingcks avec core.filemode.

En ce qui concerne l’intégration de Visual Studio: c’est Open Source. Il est injuste de s’attendre à ce que les autres travaillent pour vous gratuitement.

Je trouve aussi plutôt amusant de ne pas poser la question sur la liste de diffusion msysGit, mais maintenant je m’écarte.