J'utilise git
pour gérer les fichiers d'un répertoire local sur une machine Windows - aucun réseau n'est impliqué ici, je ne pousse ni ne tire vers/depuis une autre machine. Mon répertoire contient peut-être 100 fichiers, tous des fichiers de test, assez petits. Lorsque je lance git status
, cela prend régulièrement entre 20 et 30 secondes. Est-ce normal? Y a-t-il quelque chose que je puisse faire pour l'accélérer ou un meilleur moyen de voir l'état de mon référentiel (fichiers modifiés, fichiers non suivis, etc.)? Les autres commandes git
semblent se terminer beaucoup plus rapidement.
Avez-vous essayé git gc? Cela nettoie cruellement le git repo.
Utilisez-vous une sorte de logiciel antivirus? Peut-être que cela interfère avec les choses. git
est très rapide pour moi sous Windows avec des référentiels contenant des milliers de fichiers.
Sur un problème similaire, j'ai constaté que le fait d'avoir un dépôt git dans un répertoire situé en dessous de mon dépôt git existant avait entraîné un ralentissement considérable.
J'ai déplacé le repo secondaire Git ailleurs et maintenant la vitesse est rapide!
Pour certaines raisons, git status
est particulièrement lent après le déplacement ou la copie du dossier du référentiel vers un nouvel emplacement.
Les exécutions ultérieures sont généralement plus rapides dans ce cas.
Avez-vous essayé de remballer? git-repack .
Sinon, essayez de dupliquer le répertoire et de supprimer le dossier .git du répertoire dupliqué. Créez ensuite un nouveau répertoire git et voyez s'il est toujours lent.
Si cela reste lent, cela ressemble à un problème système ou matériel. Git termine le statut sur des centaines de fichiers pour moi en moins de 5 secondes.
Le problème pour moi était que j'avais beaucoup de référentiels différents clonés sur mon disque dur local. Plus vous avez de dépôts, plus vous aurez besoin de temps pour exécuter des commandes telles que git status.
J'ai simplement supprimé une grande partie des pensions dont je n'avais plus besoin localement, et mon statut de git est passé de 1 minute à 5 secondes.
Je ne vois aucune réponse semblable à celle-ci ici.
Exécuter git fsck
a résolu ce problème pour moi par le passé.
Un autre aspect de git status
qui sera amélioré (dans Git 2.14.x/2.15, Q4 2017) est le moment où il affiche également les fichiers ignorés ( git status --ignored
)
"
git status --ignored
", en remarquant qu'un répertoire sans chemin suivi est ignoré, toujours énuméré tous les chemins ignorés dans le répertoire, ce qui est inutile.
Le chemin de code a été optimisé pour éviter cette surcharge.
Voir commit 5aaa7fd (18 sept. 2017) par Jameson Miller (jamill
) .
(Fusion par Junio C Hamano - gitster
- dans commit 075bc9c , 29 sept. 2017)
Améliorer les performances de
git status --ignored
Améliorez les performances de la logique de liste de répertoires lorsque vous souhaitez répertorier des répertoires ignorés non vides. Afin d'afficher les répertoires ignorés non vides, la logique existante effectuera une itération récursive à travers tout le contenu d'un répertoire ignoré.
Cette modification introduit l'optimisation pour arrêter de parcourir le contenu une fois le premier fichier trouvé. Cela peut améliorer considérablement les performances 'git status --ignored' dans les référentiels contenant un grand nombre de fichiers dans des répertoires ignorés.Pour un exemple de la différence de performance sur un exemple de référentiel avec 196 000 fichiers dans 400 répertoires ignorés:
| Command | Time (s) |
| -------------------------- | --------- |
| git status | 1.2 |
| git status --ignored (old) | 3.9 |
| git status --ignored (new) | 1.4 |
Pour plus d'amélioration (défini dans Git 2.17, Q2 2018), voir this answer .
Mon git status
était très lent (jusqu'à une minute), car le fichier global .gitignore
était situé dans mon profil utilisateur Windows, qui était stocké sur un partage réseau inaccessible.
git config --global core.excludesfile
a montré quelque chose comme \\Nxxxx0\User\Username\Eigene Dateien\gitignore_global.txt
Pour une raison quelconque, \\Nxxxx0
était inaccessible et mon profil d’utilisateur a été chargé à partir d’un système de sauvegarde \\Nxxxxx1
. Cela a pris un certain temps, car mon profil utilisateur est généralement lié à une lettre de lecteur par un script de démarrage d'entreprise et l'accès à cette lettre de lecteur fonctionnait comme d'habitude . Je ne suis pas sûr de savoir pourquoi git-config utilisait le réseau. partager et pas la lettre de lecteur (probablement un plus jeune moi est à blâmer)
Après mise git config --global core.excludesfile $HOME/Eigene\ Dateien/gitignore_global.txt
git status
était de retour à la vitesse normale.
Dans mon cas, la lenteur était due à l'exécution de git status
en tant qu'utilisateur différent du propriétaire des fichiers du projet.
Bien que non applicable dans tous les cas, une simple chown
à votre utilisateur actuel peut faire l'affaire.