# #git #github #gitlab
Вопрос:
Одной из полезных функций GitHub является то, что он обслуживает различные представления одного файла. Например, если мы возьмем один файл,
- Снимок файла в фиксации: https://github.com/pandas-dev/pandas/blob/5c8f4817500313a8b942ac9e189248f1077272f8/index.html
- Версия в ветке: https://github.com/pandas-dev/pandas/blob/gh-pages/index.html
и так далее…
В основном в GitHub/GitLab есть страница для каждого файла для каждого снимка.
Мне интересно, как это реализовано в бэкэнде. Хранят ли они и индексируют каждый снимок по отдельности, чтобы их можно было быстро обработать? Или они загружают их в режиме реального времени? Если они хранят каждый снимок каждого файла, это кажется немного неэффективным с точки зрения хранения.
Был бы признателен за любую информацию.
Комментарии:
1. Почему это отклонено? Действительно не понимаю враждебности. Я могу отредактировать формат вопроса, если вы хотите. Я погуглил и нигде не смог найти информацию об этом, и подумал, что это будет полезно для всех, кто интересуется тем, как работают эти сервисы хостинга git.
2. GitLab имеет открытый исходный код, поэтому вы можете изучить исходный код. Но вы можете просматривать каждый отслеживаемый файл в любой фиксации в репозитории git , не проверяя их в локальной системе, используя
git show revision:/path/to/file
, напримерgit show HEAD:.gitignore
3. @phd да, я знаю о командах git, но мне просто любопытно, как работают массовые сервисы хостинга, такие как GitHub и GitLab. Я предполагал, что они не выполняют эти операции в реальном времени, но единственный другой вариант, который я мог придумать, — это фактически хранить каждый снимок каждого файла, что ставит вопрос об эффективности хранения. Я думал о том, чтобы заглянуть в репозиторий GitLab, но это немного ошеломляет, поэтому подумал, что сначала спрошу здесь. Спасибо.
4. Я уверен, что они хранят объекты Git в огромной базе данных и используют модифицированные
libgit
для доступа к базе данных. Они переопределяютgit
команды поверх указанных измененныхlibgit
.
Ответ №1:
GitHub хранит данные Git в обычном репозитории Git. Когда данные Git необходимы для визуализации страницы любого типа, на файловый сервер отправляется запрос RPC для соответствующего типа данных, данные возвращаются, а затем они выделяются (при необходимости) и отображаются. GitHub использует множество расширенных функций Git для обеспечения максимально эффективного доступа к данным.
Существует множество типов вызовов RPC, которые могут предоставлять различные типы данных для различных типов страниц и других служб, которым они необходимы для работы (например, служба проверки GPG). Эти вызовы RPC используют Git или libgit2 для сбора и обработки данных.
Файловые серверы и веб-интерфейсы существуют в одном и том же центре обработки данных на мощных серверах с быстрыми подключениями, и, как правило, влияние этого способа на производительность минимально.