git: быстрый веб-интерфейс для огромных репозиториев
Некоторые git-репозитории имеют очень большие размеры: DragonFly BSD .git
директория имеет размер 324 МБ, а объем FreeBSD превышает 0,5 ГБ в упакованном размере и более 2 ГБ в распакованном размере.
Gitweb, cgit или любые другие веб-инструменты выполняют какой-либо предварительный кеширование для этих огромных репозиториев?
Как можно оценить оптимальный объем ресурсов (например, ограничения памяти и процессора) для веб-интерфейса для пары таких огромных хранилищ? Каково будет время ответа для обвинения или операции регистрации случайного файла?
2 ответа
(Обновление июнь 2017 года, 4 года спустя)
На самом деле, эти репозитории крошечные.
Кодовая база Microsoft Windows представляет собой огромное хранилище: 3,5 миллиона файлов и размер более 270 ГБ.
И Git справляется с этим хорошо... с добавлением GVFS (виртуальной файловой системы Git), анонсированной в феврале 2017 года: она решает большинство проблем масштабирования Git (слишком много нажатий, ветвлений, истории и файлов).
И команды остаются достаточно быстрыми (источник: " Самое большое Git-репо на планете")
Для контекста, если мы попробуем это с "vanilla Git", перед тем, как мы начнем нашу работу, многие из команд будут занимать от 30 минут до нескольких часов, а некоторые из них никогда не будут выполнены.
Узнайте больше с " Beyond GVFS: больше подробностей по оптимизации Git для больших репозиториев"
Это еще не доступно в родном Git, но команда Microsoft работает над выпуском исправлений.
Благодаря модели хранилища объектов git, размер репозитория git на самом деле не является проблемой для gitweb и подобных инструментов (кстати, размер репо 500 МБ довольно мал - ядро Linux сейчас близко к 1 ГБ, фреймворки / база Android - несколько гигабайт).
Это потому, что gitweb не нужно извлекать весь репозиторий, чтобы показать вам дерево - он всегда может посмотреть только на несколько объектов: объекты коммитов, чтобы показать коммиты, объекты дерева, чтобы отобразить каталоги, и объекты BLOB-объектов, чтобы показать вам файлы.
Единственная операция, которая может замедлить работу gitweb - это отображение истории для одного файла, но это происходит не очень часто, и даже тогда git довольно хорошо справляется с этим без особых проблем.
Что касается скорости работы с gitweb, то лучшая оптимизация, которую вы можете сделать, - это запустить gitweb (это скрипт Perl) под mod_perl
Таков, что интерпретатор Perl загружается в память только один раз. Одно это заставит летать gitweb, и операции с git будут почти незаметны.