179 votes

Quelles sont les limites de fichier dans Git (nombre et taille)?

Personne ne sait ce que sont le Git de limites pour le nombre de fichiers et la taille des fichiers?

166voto

VonC Points 414372

Ce message de Linus lui-même peut vous aider avec certains autres limites

[...] CVS, c'est à dire qu'il va vraiment finir par être assez bien orientées "un fichier à un moment".

Ce qui est agréable dans le sens que vous pouvez avoir un million de fichiers, et ensuite seulement de vérifier de quelques-uns d'entre eux - vous ne serez jamais à même de voir l'impact de l'autre 999,995 fichiers.

Git fondamentalement jamais vraiment regarde de moins que l'ensemble des pensions. Même si vous limite un peu les choses (c'est à dire vérifier qu'une partie seulement, ou qui ont l'histoire aller dos un peu), git finit toujours se soucier de l'ensemble de la chose, et la réalisation de la connaissance autour de.

Donc git échelles vraiment mal si vous forcer à regarder tout ce que l'on énorme référentiel. Je ne pense pas que la partie est vraiment réparable, même si nous peut probablement améliorer.

Et oui, il y a le "gros fichier". Je ne sais vraiment pas quoi ne sur de gros fichiers. Nous sucer à eux, je sais.

Voir plus dans mon autre réponse: la limite avec Git, c'est que chaque dépôt doit représenter un "ensemble cohérent de fichiers", le "système" lui-même (vous ne pouvez pas le tag "partie d'un référentiel").
Si votre système est constitué de l'autonomie (mais l'inter-dépendant) des pièces, vous devez utiliser submodules.

Comme illustré par Talljoe de réponse, la limite peut être un système un (grand nombre de fichiers), mais si vous comprenez la nature de Git (à propos de la cohérence des données représentée par son SHA-1 touches de), vous vous rendrez compte que le vrai "limite" est une utilisation un: j'.e, vous ne devriez pas essayer de stocker le tout dans un dépôt Git, sauf si vous êtes prêt à toujours obtenir ou tag tout en arrière. Pour certains projets de grande envergure, il n'aurait aucun sens.


Pour un regard plus en profondeur à git limites, voir "git avec de gros fichiers"

Les trois questions qui limite un repo git:

  • de gros fichiers (le xdelta pour packfile est uniquement en mémoire, ce qui n'est pas bonne avec de gros fichiers)
  • très grand nombre de fichiers, ce qui signifie, un fichier par blob, et lent git gc pour générer un packfile à la fois.
  • énorme packfiles, avec un packfile indice inefficace pour récupérer des données à partir de la (énorme) packfile.

36voto

Talljoe Points 8423

Il n'y a pas vraiment de limite, tout ce qui est nommé avec un 160 bits nom. La taille du fichier doit être représentable dans un environnement 64 bits, donc pas vraiment de limite.

Il y a une limite pratique, cependant. J'ai un répertoire ~8 go avec >880,000 et git gc prend un certain temps. L'arbre de travail est assez grand pour les opérations qui inspecter tout le répertoire de travail, prendre un certain temps. Ce repo n'est utilisé que pour le stockage de données, si, si c'est juste un tas d'outils automatisés qui le manipulent. Tirant les changements de l'opération est beaucoup, beaucoup plus vite que rsyncing les mêmes données.

%find . -type f | wc -l
791887
%time git add .
git add .  6.48s user 13.53s system 55% cpu 36.121 total
%time git status
# On branch master
nothing to commit (working directory clean)
git status  0.00s user 0.01s system 0% cpu 47.169 total
%du -sh .
29G     .
%cd .git
%du -sh .
7.9G    .

28voto

Brian Carlton Points 2908

Si vous ajoutez des fichiers qui sont trop grands (Sgb dans mon cas, Cygwin, XP, 3 GO de RAM), s'attendre à ce.

fatal: de mémoire, malloc a échoué

Plus de détails ici

Mise à jour 3/2/11: Vu de semblable dans Windows 7 x64 avec Tortoise Git. Des tonnes de mémoire utilisée, très très lent de réponse du système.

17voto

CharlesB Points 27070

De retour en Février 2012, il y avait un très intéressant sujet sur le Git liste de diffusion à partir de Josué Redstone, un Facebook, ingénieur logiciel de test de Git sur un immense dépôt de test:

Le test des pensions de 4 millions de dollars s'engage, histoire linéaire et environ 1,3 million de les fichiers.

Les Tests qui ont été exécutés de montrer que pour un repo Git est inutilisable (opération froide dure de quelques minutes), mais cela pourrait changer dans l'avenir. Fondamentalement, la performance est pénalisé par le nombre d' stat() des appels au noyau module FS, de sorte qu'il dépend du nombre de fichiers dans le dépôt, et la FS de la mise en cache de l'efficacité. Voir aussi ce Essentiel pour la poursuite de la discussion.

2voto

Dustin Points 35205

Cela dépend de ce que vos sens. Il existe des limites de taille (si vous avez un grand nombre de fichiers, il peut obtenir ennuyeusement lent). Si vous avez beaucoup de fichiers, les analyses peuvent également devenir lent.

Il n'y a pas vraiment de limites inhérentes au modèle. Vous pouvez certainement l'utiliser mal et d'être misérable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X