2016-05-02 2 views
0

В Github Когда я хочу сделать редактирование в репозитории, которого у меня нет, я его разблокирую, что означает, что я копирую все файлы/папки репозитория в свое собственное пространство для хранения, а затем добавляю изменения в ветку, в конце, которое я делаю вытащить запрос в оригинальном хранилище для владельца, чтобы объединитьЯвляется ли хранилище эффективным, как работает запрос на github pull?

Если каждое редактирование сделает такое копирование всех хранилищ, это будет огромная трата хранения и экспоненциальный рост избыточных данных.

Это право, или я пропустил большую фотографию?

Рассмотрим, если это не просто текстовые файлы, если это медиа-файлы для каждого внести свой вклад в мерзавца

+0

Несколько связанные блог от инфраструктуры команды Github об их системе хранения данных: http://githubengineering.com/introducing-dgit/ – Thilo

+0

спасибо от статьи -> DGit использует это свойство Git, чтобы сохранить три копии каждого хранилища , на трех разных серверах он теперь масштабируется больше, –

+0

Ну, в статье не говорится, если вилка репо размещена на тех же трех серверах (так что фактическое копирование не должно происходить). – Thilo

ответ

3

В самом деле, если вилка была полная копия репозитория, то это было бы очень неэффективно. GitHub's engineering blog это указывает в своем блоге об ускорении работы сети:

... если каждый [вилка] были его собственные копии репозитория, это будет означать огромное количество избыточного дискового пространства, что требует в несколько раз больше файловых серверов, чем те, которые у нас есть в нашей инфраструктуре.

Вместо GitHub вилки использовать git alternate storage, что позволяет хранилище, чтобы указать его repository object storage в другое место.

Это позволяет всем вилкам указывать на одно местоположение на диске, что сводит к минимуму дублирование и позволяет оптимизировать вилки. blog post продолжает:

Вот почему мы решили использовать функцию Git, которая называется alternates. Когда вы создаете репозиторий на GitHub, мы создаем его мелкую копию. Эта копия не имеет собственных объектов, но имеет доступ ко всем объектам альтернативного корневого репозитория, который мы вызываем network.git, и который содержит объекты для всех вилок в сети. Когда вы нажимаете на свой репозиторий, в конце концов мы перемещаемся по объектам, которые вы нажимаете на root.it root, поэтому они уже доступны, если вы решили создать запрос Pull к исходному репозиторию.

Со всеми репозиториями в сети, использующими один и тот же пул объектов, мы можем хранить все объекты внутри одного пакета и, следовательно, минимизировать размер хранилища в репозитории на диске, не сохраняя все дублированные объекты между вилки.

Смежные вопросы