web-dev-qa-db-fra.com

Statut Git prend beaucoup de temps pour se terminer

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.

62
Matt McMinn

Avez-vous essayé git gc? Cela nettoie cruellement le git repo.

94
Scott

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.

7
1800 INFORMATION

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!

5
Sarge

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.

4
DanJAB

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.

3
thedz

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.

2
Jack Perry

Exécuter git fsck a résolu ce problème pour moi par le passé.

1
Bill

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 .

1
VonC

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.

0
Arigion

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. 

0
Czar Pino