Как на самом деле работает git fork? - PullRequest
2 голосов
/ 03 апреля 2019

Я хотел бы спросить, как на самом деле работает git fork на git server?Например, в gitlab, когда пользователь разветвляет репозиторий, тогда файлы проекта фактически копируются, или есть ссылка (символическая) с основным репозиторием?Иными словами, одни и те же файлы хранятся (в базе данных) N раз, по одному на каждую ветвь?Если да, не трата ли это места на жестком диске?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Есть ли какая-либо особая дедупликация между вилками, и если так, как происходит дедупликация между вилками, частично зависит от сервера. Git предоставляет несколько механизмов, таких как переменная окружения GIT_ALTERNATE_OBJECT_DIRECTORIES и файл objects/info/alternates. Подробности смотрите в документации верхнего уровня и документации макета хранилища git . При использовании этого метода будьте осторожны; учитывайте предупреждения в документации.

Помните, что в отношении самого Git форк - это просто клон: сервер записывает некоторую дополнительную информацию за спиной Git (даже если для этого использует механизмы Git), чтобы «форк» имел дополнительное значение по сравнению с простой клон, но сам Git блаженно не знает об этой дополнительной информации. Если в процессе клонирования используется локальный путь (не file:// и не URL-адрес хоста), Git по умолчанию будет пытаться использовать жесткие ссылки для обмена объектами и / или упаковки файлов. Этот вид обмена в целом безопасен и не требует особого ухода. Это видно для Git, но Git не нужно знать об этом за пределами начального процесса жесткой ссылки.

Помимо этих методов, базовая операционная система может предоставлять методы дедупликации для файлов и / или для блочного хранилища. Они, если они есть, невидимы для самого Git. Они не требуют особого ухода при использовании Git. Как правило, они используют больше вычислительной мощности для обнаружения такого дублирования и могут быть сложны в администрировании, но все это происходит на уровне ОС.

0 голосов
/ 03 апреля 2019

Чтобы ответить на первую часть вашего вопроса: «Когда пользователь разветвляет репозиторий, тогда файлы проекта фактически копируются или существует ссылка (символическая) на основной репозиторий?»Вилка - это копия репозитория, а не просто ссылка.Те же файлы хранятся.

Чтобы ответить на вторую часть вашего вопроса: «Если да, то не трата ли это места на жестком диске?»Это не совсем вопрос с прямым ответом, но я могу предложить свои 2 цента.Вообще я считаю децентрализованный компонент git одной из своих сильных сторон.Если вы потеряете свой удаленный репозиторий на GitHub или GitLab, если ваши разработчики часто тянут, вы можете не потерять много.Это также позволяет нескольким разработчикам одновременно экспериментировать с изменениями и добавлять функции, не затрагивая код, который может быть только рабочим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...