Распределенная система контроля версий действительно не имеет централизованного хранилища? - PullRequest
9 голосов
/ 19 марта 2010

Это может показаться глупым вопросом, но как настроить рабочий каталог без сервера для проверки? И как бизнес хранит надежную резервную копию репо?

Полагаю, тогда должен быть центральный репо ... но тогда как именно он "распределяется"? Я всегда думал о различии сервер-клиент (SVN) и peer-2-peer (GIT), но я не верю, что это может быть правильным, если инструменты, подобные GIT, не зависят от технологии в стиле торрента?

Ответы [ 7 ]

9 голосов
/ 19 марта 2010

Действительно ли распределенная система контроля версий не имеет централизованного хранилища?

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

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

В распределенной VCS топология вашей сети не ограничена. Вы можете теоретически иметь любую форму, которая вам нравится. У вас может быть отдельный репозиторий для каждой команды или подпроекта, а также этап коммитов. Вы можете иметь стабильный репозиторий и нестабильный репозиторий, а также множество ветвей функций и так далее. И нет никакого различия между клиентом и сервером - все узлы равны. Каждый репозиторий является автономным и полным и может выдвигать и / или извлекать изменения из любого другого. Для начала вы клонируете существующий репозиторий (создаете свою собственную копию для работы) и начинаете вносить изменения. Как только вы сделаете свой первый коммит, у вас фактически будет ветвь. К счастью, обычно очень легко объединить ваши изменения, когда вы закончите.

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

как настроить рабочий каталог без сервера для проверки?

Ваш репозиторий должен начинаться где-то с исходного дерева. Таким образом, всегда есть первый репозиторий с начальной серией проверок. Допустим, вы хотите работать над Murky . Вы бы клонировали хранилище, которое дает вам полное хранилище со всей историей и регистрациями. Вы вносите некоторые изменения (таким образом, создавая ветку), и когда вы закончите, вы откладываете свои изменения назад, где они объединяются. Обе системы действуют как одноранговые узлы, и они выталкивают и вытягивают наборы изменений между собой.

И Mercurial, и Git хранят репозиторий в скрытом подкаталоге, поэтому одно дерево каталогов содержит как вашу рабочую копию (которая может находиться в любом нужном вам состоянии), так и само хранилище.

А как бизнес хранит надежную резервную копию репо?

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

Полагаю, тогда должен быть центральный репо ... но тогда как именно он "распределяется"? Я всегда думал о различии сервер-клиент (SVN) и peer-2-peer (GIT), но я не верю, что это может быть правильным, если инструменты, подобные GIT, не зависят от технологии в стиле торрента?

Он не распространяется в том смысле, что разные клиенты имеют разные части, такие как одноранговый обмен файлами. Это действительно просто в отличие от централизованной модели.

Все репозитории DVCS являются гражданами первого класса. Это становится социальным или управленческим вопросом о том, как их организовать, а не техническим вопросом.

7 голосов
/ 19 марта 2010

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

6 голосов
/ 19 марта 2010

Здесь следует сделать важное различие: есть технический центральный сервер или один по соглашению .

Технически все клоны репозитория git эквивалентны.Все они позволяют изменения, регистрации, филиалы, слияния друг с другом.Нет единого репозитория, который был бы как-то «более правдивым», чем любой другой.

По социальным соглашениям большинство проектов, использующих git, имеют центральный репозиторий, который считается авторитетным репозиторием, представляющим официальное состояниеproject.

Сравните это с более традиционной VCS, такой как SVN: здесь центральный репозиторий технически очень отличается от локальной проверки, которую может иметь каждый разработчик.Локальная проверка может выполнять операции VCS только в отношении центрального хранилища.Без центрального репозитория разработчик не сможет зафиксировать.

5 голосов
/ 19 марта 2010

Распределенный контроль версий позволяет вам иметь полную копию всей истории (всего хранилища), встроенную как часть вашей локальной (извлеченной) копии.

В добавление ,у большинства проектов будет центральный репозиторий, в котором будет также иметь копию всего.Это означает, что в какой-то момент вам нужно будет перенести ваши изменения из вашего локального хранилища в центральное.Но это также означает, что вы можете работать локально с тем, что душе угодно, а затем только проталкивать изменения, которые вы хотите подтолкнуть, и вам нужно подталкивать их только тогда, когда вы будете готовы.Ядро Linux: Многие люди будут проверять откуда-нибудь клонирование дерева ядра.Это может быть дерево Линуса, или это может быть одно из других деревьев, плавающих вокруг kernel.org или Интернета.Но дерево Линуса существует как на kernel.org, так и (предположительно) также на компьютерах Линуса (и на компьютерах любого другого, кто их там вытянул).

Последнее сообщение в блоге Джоэля описал преимущества (и основное отличие от таких систем, как Subversion) лучшего DVCS:

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

Таким образом, вы помещаете копию дерева на какой-то центральный сервер, куда другие люди могут извлечь (или на ваш частный сервер, чтобырезервное копирование), и когда вы чувствуете, как это, вы толкаете туда немного.Тогда, если кто-то захочет получить копию, он может клонировать оттуда.

2 голосов
/ 19 марта 2010

Технически, DVCS не нуждается в централизованном хранилище.

В реальной жизни приложение (например, ядро ​​Linux) должно быть построено из единого согласованного набора источников перед доставкой.

Таким образом, DVCS не навязывает политику управления источниками и оставляет такие решения руководителям проектов.

1 голос
/ 19 марта 2010

Аналогия "равный-равному" фактически относится к , как вы получаете изменения из другого репо.

  • С DVCS вы выбираете изменения, а затем решаете объединить их, если хотите.
  • С помощью CVS вы обновляете изменения, которые напрямую влияют на ваше рабочее пространство

Поскольку вы можете получать данные из любого другого «однорангового» репозитория (репо с одинаковым первым коммитом), вы можете считать это одноранговой моделью , поскольку:

Пиры являются как поставщиками, так и потребителями ресурсов, в отличие от традиционной модели клиент-сервер, когда только серверы поставляют, а клиенты потребляют.

0 голосов
/ 20 марта 2010

Технически вам не нужен центральный сервер: вы можете просто обмениваться коммитами со своими коллегами и все.

Логически (просто взгляните на github.com) всегда будет (по крайней мере) центральный репозиторий, своего рода «мастер-копия», на которую можно положиться. Я предполагаю, что в ядре Linux репозиторий Линуса является основным, из которого в конечном итоге принимаются изменения, не так ли?

Я думаю, что это будет особенно верно для компаний, использующих DVCS: они будут полагаться не на «копии» разработчиков, а на централизованные, хотя, очевидно, может быть БОЛЬШЕ, чем одна копия (что очень хорошо, чтобы избежать катастроф тоже :-P, и бывает довольно естественно с DVCS)

...