Question Git / Bash est extrêmement lent dans Windows 7 x64


J'utilise Git à la fois sous Windows et Ubuntu pendant le développement d'un petit projet, souvent entre les deux. Le problème que je rencontre est que Git / Bash est toujours lent. Quand je dis lentement, je veux dire que courir cd prend de 8 à 25 secondes, en cours d'exécution git les commandes durent de 5 à 20 secondes et ls peut prendre jusqu'à 30 secondes parfois. Inutile de dire que ce n'est pas amusant, pour ne pas dire improductif. Je sais que Git est plus lent sur Windows, mais c'est ridicule.

La seule solution qui a fonctionné - temporairement - pour moi a été de désactiver ma connexion réseau (comme suggéré dans cette réponse), lancez git, puis reconnectez-vous. Parfois, il continue à fonctionner rapidement pendant des jours après avoir fait cela, mais la performance se dégrade toujours finalement. J'ai parcouru le groupe de discussion msysgit, SO, la liste des problèmes msysgit, etc., pendant des semaines, mais je n'ai pas réussi à trouver des solutions qui fonctionnent.

Jusqu'à présent, j'ai essayé:

  • Ajout de dossiers git & project à la liste d'exclusion du scanner de virus
  • Désactiver complètement mon scanner de virus (Kaspersky IS 2011)
  • S'assurer que Outlook n'est pas en cours d'exécution (Outlook 2007)
  • Arrêt de toutes les autres applications
  • En cours d'exécution en tant qu'administrateur
  • Désactivation de la connexion réseau, démarrage de git et désactivation de la connexion
  • Désactivation de la connexion réseau, démarrage de git, réactivation de la connexion (ne fonctionne que de temps en temps)
  • Running git gc
  • Et des combinaisons de ce qui précède

J'ai lu que quelques personnes avaient du succès en désactivant la complétion de bash, mais idéalement, j'aimerais que ça reste actif. La version de msysgit est 1.7.3.1-preview20101002 et le système d'exploitation est Windows 7 x64. Exécuter les mêmes choses sous Linux est prévisible, rapide comme l'éclair. J'utiliserais exclusivement Linux, mais j'ai aussi besoin de faire fonctionner Windows (certaines applications, tests, etc.).

Quelqu'un at-il rencontré un problème similaire? Si oui, quel était le problème sous-jacent et quelle était la solution (le cas échéant)?

Edit: Cela va au-delà des dépôts git, mais juste pour référence, le repos que j'ai utilisé avec git a été assez petit: ~ 4-50 fichiers max.


357
2017-12-19 20:58


origine


Réponses:


Vous pouvez accélérer considérablement git sur Windows en exécutant trois commandes pour définir des 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 les 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 liés à l'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 /


364
2018-06-04 19:30



Avez-vous des informations Git affichées dans votre invite Bash? Si oui, peut-être que vous faites trop de travail par inadvertance sur chaque commande. Pour tester cette théorie, essayez le changement temporaire suivant dans Bash:

export PS1='$'

76
2017-12-19 22:10



Mon répertoire personnel Windows se trouve sur le réseau, et je soupçonnais que les commandes Git Bash y cherchaient d'abord. Effectivement, quand j'ai regardé $ PATH, il a listé / h / bin en premier, où / h est un partage sur un serveur de fichiers Windows, même si / h / bin n'existe pas. J'ai édité / etc / profile et j'ai mis en commentaire la commande export qui le place en premier dans $ PATH:

#export PATH="$HOME/bin:$PATH"

Cela a rendu mes commandes plus rapides, probablement parce que Git Bash ne regarde plus les exécutables sur le réseau. Mon / etc / profile était c: \ Program Files (x86) \ Git \ etc \ profile.


64
2017-08-09 14:27



J'ai trouvé que le lecteur réseau était le problème de performance. HOME pointait vers un partage réseau lent. Je ne pouvais pas écraser HOMEDRIVE mais ce n'est pas un problème de ce que j'ai vu.

Définir la variable d'environnement par un clic droit votre ordinateur sur le bureau -> Propriétés -> Paramètres système avancés -> Variables d'environnement Ajouter aux variables utilisateur

HOME=%USERPROFILE%

27
2018-01-07 22:34



Bien que votre problème puisse être basé sur le réseau, j'ai personnellement accéléré mon git status appelle dix fois (7+ secondes jusqu'à 700 ms) en faisant deux modifications. Ceci est sur un dépôt de 700 Mo avec 21 000 fichiers et un nombre excessif de gros fichiers binaires.

L'une est d'activer les précharges d'index parallèles. À partir d'une invite de commande:
git config core.preloadindex true
Cela a changé time git status de 7 secondes à 2,5 secondes.

Mettre à jour!

Ce qui suit n'est plus nécessaire. Un patch a corrigé cela depuis mysysgit 1.9.4
https://github.com/msysgit/git/commit/64d63240762df22e92b287b145d75a0d68a66988
  Cependant, vous devez activer le correctif en tapant
git config core.fscache true

J'ai également désactivé l'UAC et le pilote "luafv" (redémarrage requis). Cela désactive un pilote dans Windows Vista, 7 et 8 qui redirige les programmes essayant d'écrire dans les emplacements système et redirige plutôt ces accès vers un répertoire utilisateur.

Pour voir une discussion sur les effets de ces effets, lisez ici: https://code.google.com/p/msysgit/issues/detail?id=320

Pour désactiver ce pilote, dans regedit, modifiez la clé "start" à HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafv à 4 pour désactiver le pilote. Ensuite, mettez UAC à son réglage le plus bas, "Never not".

Si la désactivation de ce pilote vous rend méfiant (il devrait l'être), une alternative est en cours d'exécution sur un lecteur (ou une partition) différent de votre partition système. Apparemment, le pilote ne s'exécute que sur l'accès aux fichiers sur la partition système. J'ai un deuxième disque dur et voir des résultats identiques lors de l'exécution de cette modification de registre sur mon lecteur C comme je le fais sans le lecteur D.

Ce changement prend time git status de 2,5 secondes à 0,7 seconde.

Vous pourriez aussi vouloir suivre https://github.com/msysgit/git/pull/94 et https://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663b pour vérifier quel travail supplémentaire est en cours pour les problèmes de vitesse dans Windows.


21
2018-03-05 20:47



Dans une extension à la réponse de Chris Dolan, j'ai utilisé le paramètre PS1 alternatif suivant. Ajoutez simplement le fragment de code à votre fichier ~ / .profile (sous Win7: c: /Users/USERNAME/.profile).

fast_git_ps1 ()                                                                              
{                                                                                            
    printf -- "$(git branch 2>/dev/null | sed -ne '/^\* / s/^\* \(.*\)/ [\1] / p')"
}                                                                                            

PS1='\[\033]0;$MSYSTEM:\w\007                                                                
\033[32m\]\u@\h \[\033[33m\w$(fast_git_ps1)\033[0m\]                                         
$ '                                                                                          

Cela conserve l'avantage d'un shell coloré et l'affichage du nom de la branche actuelle (si dans un repo git), mais est nettement plus rapide sur ma machine, de ~ 0.75s à 0.1s.

Basé sur ce blog.


21
2017-11-20 15:53



Il semble que désinstaller complètement Git, redémarrer (le remède Windows classique), et réinstaller Git était le remède. J'ai également effacé tous les fichiers de configuration bash restants (ils ont été créés manuellement). Tout est à nouveau rapide.

Si pour une raison quelconque, la réinstallation n'est pas possible (ou souhaitable), alors j'essayerais certainement de changer la variable PS1 référencée dans La réponse de Chris Dolan; cela a entraîné des accélérations significatives dans certaines opérations.


14
2017-12-22 04:37



J'ai résolu mon problème de git lent sur Win 7 x64 en démarrant cmd.exe avec "Exécuter en tant qu'administrateur".


8
2017-10-28 01:04



J'ai vu une amélioration décente en mettant core.preloadindex à vrai comme recommandé ici.


8
2017-08-17 10:49