Sur ma machine Windows git stash
a environ 3,5 secondes de surcharge à chaque invocation, ce qui ajoute environ 7 secondes à mon hook de commit git.
La même commande sous linux (même machine) prend environ 0,01 seconde. Le problème de performance s'applique également aux dépôts vides.
J'ai essayé ce qui suit à partir de ce fil y ce fil :
-
core.fscache
est réglé surtrue
-
core.preloadindex
est réglé surtrue
-
gc.auto
est réglé sur256
- Réglage PS1='$ '
- Exécution de cmd en mode administration
- Courir à l'intérieur cmd.exe au lieu de git-bash
Running GIT_TRACE=true git stash list
16:58:16.844591 git.c:563 trace: exec: 'git-stash' 'list'
16:58:16.844591 run-command.c:336 trace: run_command: 'git-stash' 'list'
16:58:19.699591 git.c:350 trace: built-in: git 'rev-parse' '--git-dir'
16:58:19.859591 git.c:350 trace: built-in: git 'rev-parse' '--git-path' 'objects'
16:58:20.069591 git.c:350 trace: built-in: git 'rev-parse' '--show-toplevel'
16:58:20.154591 git.c:350 trace: built-in: git 'rev-parse' '--git-path' 'index'
16:58:20.244591 git.c:350 trace: built-in: git 'config' '--get-colorbool' 'color.interactive'
16:58:20.334591 git.c:350 trace: built-in: git 'config' '--get-color' 'color.interactive.help' 'red bold'
16:58:20.424591 git.c:350 trace: built-in: git 'config' '--get-color' '' 'reset'
16:58:20.514591 git.c:350 trace: built-in: git 'rev-parse' '--verify' '--quiet' 'refs/stash'
real 0m3.845s
user 0m0.000s
sys 0m0.047s
Running GIT_TRACE_PERFORMANCE=true git stash list
16:59:18.414591 trace.c:420 performance: 0.001078046 s: git command: 'C:\Program Files\Git\mingw64\libexec\git-core\git.exe' 'rev-parse' '--git-dir'
16:59:18.569591 trace.c:420 performance: 0.000947184 s: git command: 'C:\Program Files\Git\mingw64\libexec\git-core\git.exe' 'rev-parse' '--git-path' 'objects'
16:59:18.779591 trace.c:420 performance: 0.001253627 s: git command: 'C:\Program Files\Git\mingw64\libexec\git-core\git.exe' 'rev-parse' '--show-toplevel'
16:59:18.869591 trace.c:420 performance: 0.001285517 s: git command: 'C:\Program Files\Git\mingw64\libexec\git-core\git.exe' 'rev-parse' '--git-path' 'index'
16:59:18.955591 trace.c:420 performance: 0.001139994 s: git command: 'C:\Program Files\Git\mingw64\libexec\git-core\git.exe' 'config' '--get-colorbool' 'color.interactive'
16:59:19.040591 trace.c:420 performance: 0.001182881 s: git command: 'C:\Program Files\Git\mingw64\libexec\git-core\git.exe' 'config' '--get-color' 'color.interactive.help' 'red bold'
16:59:19.125591 trace.c:420 performance: 0.001128997 s: git command: 'C:\Program Files\Git\mingw64\libexec\git-core\git.exe' 'config' '--get-color' '' 'reset'
16:59:19.215591 trace.c:420 performance: 0.001567766 s: git command: 'C:\Program Files\Git\mingw64\libexec\git-core\git.exe' 'rev-parse' '--verify' '--quiet' 'refs/stash'
16:59:19.295591 trace.c:420 performance: 3.730583540 s: git command: 'C:\Program Files\Git\mingw64\bin\git.exe' 'stash' 'list'
real 0m3.819s
user 0m0.000s
sys 0m0.062s
D'après le journal, nous constatons qu'il faut environ 3 secondes entre l'exécution de la commande git-stash et l'exécution de git-rev-parse. Y a-t-il d'autres indicateurs que je peux utiliser pour trouver le goulot d'étranglement ?
0 votes
Il est possible que votre référentiel soit volumineux, pouvez-vous essayer de lancer
git gc
sur votre référentiel local ET distant ?0 votes
Cela prend le même temps dans un référentiel vide. J'ai mis à jour la question.
0 votes
@sighol avez-vous traversé ce fil et testé cet indice
0 votes
@eis Oui, j'ai lu ces fils. Ils ne semblent pas fonctionner pour moi. J'ai mis à jour la question.
2 votes
Le repo git local est-il hébergé sur votre disque local ou sur un disque distant/réseau ?
0 votes
@g19fanatic non, il est hébergé sur mon ordinateur
0 votes
Où se trouve le fichier gitconfig ? N'est-il pas sur un disque distant ? Il devrait être dans votre répertoire personnel, mais j'ai vu des cas où le répertoire de l'utilisateur était distant, ce qui conduisait à de mauvaises performances.
1 votes
Si vous voulez simplement que les choses fonctionnent plus rapidement, vous pouvez essayer de créer une branche temporaire, de tout commiter à cet endroit et vous aurez le même effet que si vous aviez caché vos changements (je fais souvent cela). Mais si vous avez posé la question pour mieux comprendre le fonctionnement de la fonctionnalité de mise en cache, vous pouvez peut-être consulter le code source de git : github.com/git/git
0 votes
J'ai le même problème que le PO en utilisant git-for-Windows 2.11.1.Windows.1. Ma gitconfig est sur un SSD local, ainsi que le référentiel. @MladenB. Bien qu'il soit possible d'obtenir les mêmes résultats en utilisant des branches, cela nécessite plusieurs étapes supplémentaires, ce qui le rend peu pratique (aussi mauvais ou pire que l'utilisation du stash lent). De plus, le but de la cachette est de ne pas créer un commit enregistré dans l'historique.
0 votes
@PascalLeMerrer Toutes les autres commandes (que j'ai remarquées) sont raisonnablement rapides. checkout, branch, status, add, commit, et prennent moins d'une seconde pour être exécutées. C'est juste stash qui est super lent (15 secondes dans mon cas).
0 votes
Ver github.com/msysgit/git/issues/259 . Il est daté mais fermé (msysgit). Quelqu'un a également ouvert stackoverflow.com/questions/44159850/ récemment.
0 votes
Antivirus/Pare-feu ?
1 votes
Pertinent : github.com/git/git/pull/495
0 votes
Pouvez-vous essayer avec Git 2.19 ? (Sept. 2018) : git stash est maintenant réécrit en C, même si la version script est toujours là par défaut : voir ma réponse ci-dessous .