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-репо на планете")

https://msdnshared.blob.core.windows.net/media/2017/05/Performance.png

Для контекста, если мы попробуем это с "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 будут почти незаметны.

Другие вопросы по тегам