10 ответов:
это сообщение от Лайнус могу помочь вам с некоторыми другими ограничениями
[...] CVS, т. е. он действительно в значительной степени ориентирован на "один файл в свое время " модель.
что приятно в том, что вы можете иметь миллион файлов, а потом только проверить из нескольких из них-вы никогда даже посмотреть влияние других 999 995 файлов.
Git принципиально никогда не смотрит на меньше все РЕПО. Даже если вы ограничьте вещи немного (т. е. проверить только часть, или есть история идти назад немного), git заканчивается тем, что все еще всегда заботится обо всем этом, и неся знание вокруг.
так мерзавец Весы очень плохо, если вы заставите его смотреть на все, как один огромный репозитория. Я не думаю, что эта часть действительно исправима, хотя мы возможно, можно улучшить его.
и да, тогда есть проблемы с "большим файлом". Я действительно не знаю, что сделайте об огромных файлах. Я знаю, что мы от них отстой.
Смотрите больше на моем другого ответа: предел с Git заключается в том, что каждый репозиторий должен представлять собой "связный набор файлов"," вся система " сама по себе (вы не можете пометить "часть репозитория").
Если ваша система состоит из автономных (но взаимосвязанных) частей, вы должны использовать подмодулей.как показано на рисунке Talljo's answer, предел может быть система один (большое количество файлов), но если вы понимаете природу Git (о когерентности данных, представленных его ключами SHA-1), Вы поймете, что истинный "предел" - это использование один: то есть, вы не должны пытаться хранить все в репозитории Git, если вы не готовы всегда получать или помечать все обратно. Для некоторых крупных проектов это не сделает чувство.
для более глубокого взгляда на пределы git см. "Git с большими файлами"
(который упоминает git-lfs: решение для хранения больших файлов за пределами репозитория git. GitHub, Апрель 2015)три вопроса, которые ограничивают РЕПО git:
- большие файлы (the xdelta для packfile это только в памяти, что не очень хорошо с большими файлы)
- огромное количество файлов, что означает, один файл на большой двоичный объект и медленный git gc для создания одного файла пакета за раз.
- огромный packfiles, с индексом packfile неэффективным для извлечения данных из (огромного) packfile.
более поздний поток (февраль. 2015) иллюстрирует ограничительные факторы для Git РЕПО:
будет несколько одновременных клонов из центральный сервер также замедляет другие параллельные операции для других пользователей?
в сервере нет блокировок при клонировании, поэтому теоретически клонирование не влияет на другие операции. Клонирование может использовать много памяти, хотя (и много процессора, если вы не включите функцию растрового изображения достижимости, которую вы должны).
будет
git pull' быть медленным?если исключить серверную сторону,размер вашего дерева главный фактор, но ваши 25k файлы должны быть в порядке (linux имеет 48k файлов).
'
git push'?это не зависит от того, насколько глубока история вашего РЕПО или насколько широко ваше дерево, поэтому должно быть быстрым..
а количество ссылок может негативно сказаться на обоих
git-pushиgit-pull.
Я думаю, что Стефан знает лучше меня в этой области.'
git commit'? (Он указан как медленный Ссылка 3.) -git status'? (Снова медленно в ссылке 3, хотя я этого не вижу.)
(такжеgit-add)опять же, размер вашего дерева. На размер репозитория, я не думаю, что вам нужно беспокоиться об этом.
некоторые операции могут показаться не повседневными, но если они часто вызываются веб-интерфейсом для GitLab/Stash/GitHub и т. д., Они могут стать узкими местами. (например,'
git branch --contains' кажется ужасно негативно сказывается большое количество филиалов.)
git-blameможет быть медленным, когда файл изменяется много.
нет никакого реального предела -- все названо с 160-битным именем. Размер файла должен быть представлен в 64-разрядное число, поэтому никаких реальных ограничений нет.
есть практический предел. У меня есть репозиторий, который составляет ~8 ГБ с >880 000, а git gc занимает некоторое время. Рабочее дерево довольно большое, поэтому операции, которые проверяют затем весь рабочий каталог, занимают довольно много времени. Это РЕПО используется только для хранения данных, так что это просто куча автоматизированных инструментов вот и разберись с этим. Потянув изменения из репозитория гораздо, гораздо быстрее, чем rsyncing одни и те же данные.
%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 .
Если вы добавляете слишком большие файлы (GBs в моем случае, Cygwin, XP, 3 ГБ ОЗУ), ожидайте этого.
фатальная ошибка: недостаточно памяти, функция malloc не
более подробная информация здесь
обновление 3/2/11: видел подобное в Windows 7 x64 с Tortoise Git. Тонны используемой памяти, очень очень медленная реакция системы.
еще в феврале 2012 года был очень интересный поток в списке рассылки Git от Джошуа Редстоуна, инженера-программиста Facebook, тестирующего Git на огромном тестовом репозитории:
тестовое РЕПО имеет 4 миллиона коммитов, линейную историю и около 1,3 миллиона файлы.
тесты, которые были выполнены, показывают, что для такого РЕПО Git непригоден (холодная операция длится несколько минут), но это может измениться в будущем. В основном производительность наказывается числом
stat()вызывает модуль ядра FS, поэтому он будет зависеть от количества файлов в репо и эффективности кэширования FS. Смотрите также в этом суть для дальнейшего обсуждения.
Это зависит от того, что вы имеете в виду. Есть практические ограничения по размеру (Если у вас много больших файлов, это может быть скучно медленно). Если у вас много файлов, сканирование также может быть медленным.
однако на самом деле нет присущих модели ограничений. Вы, конечно, можете использовать его плохо и быть несчастным.
Я думаю, что хорошо попытаться избежать больших фиксаций файлов как части репозитория (например, дамп базы данных может быть лучше в другом месте), но если учесть размер ядра в его репозитории, вы, вероятно, можете рассчитывать на комфортную работу с чем-либо меньшим по размеру и менее сложным, чем это.
У меня есть большое количество данных, которые хранятся в моем РЕПО в виде отдельных фрагментов JSON. В нескольких каталогах находится около 75 000 файлов, и это не очень вредно для производительности.
проверка их в первый раз была, очевидно, немного медленной.
Я нашел это, пытаясь сохранить огромное количество файлов (350k+) в репо. Да, магазин. Смеется.
$ time git add . git add . 333.67s user 244.26s system 14% cpu 1:06:48.63 totalследующие выдержки из Bitbucket документация довольно интересно.
когда вы работаете с клонированием репозитория DVCS, нажимая, вы работаете со всем репозиторием и всей его историей. На практике, как только ваш репозиторий становится больше 500 МБ, вы можете начать видеть проблемы.
... 94% от Клиенты Bitbucket имеют репозитории размером менее 500 МБ. Как ядро Linux, так и Android находятся под 900MB.
рекомендуемое решение на этой странице-разделить ваш проект на более мелкие куски.
по состоянию на 2018-04-20 Git для Windows имеет ошибку который эффективно ограничивает размер файла до 4 Гб максимум, используя эту конкретную реализацию (эта ошибка распространяется и на lfs).
Comments