Сравнение централизованных и Распределенных систем контроля версий [закрыто]

StackOverflow https://stackoverflow.com/questions/111031

Вопрос

Что это за преимущества и недостатки с использованием Централизованный или Распределенный Системы контроля версий (DVCS)?Сталкивались ли вы с какими-либо проблемами в DVCS и как вы защитились от этих проблем? Сведите к минимуму агностицизм и пламенность инструмента обсуждения.

Для тех, кому интересно, какие инструменты DVCS доступны, вот список наиболее известных бесплатных / с открытым исходным кодом DVCS:

Это было полезно?

Решение

От мой ответ к другому вопрос:

Распределенные системы контроля версий (DVCSS) решают иные проблемы, чем Централизованные VCS.Сравнивать их все равно что сравнивать молотки и отвертки.

Централизованные венчурные капиталисты системы разработаны с намерением, чтобы существовал Один Истинный Источник, который Благословен, и следовательно, Хорош.Все разработчики работают (оформляют заказ) из этого источника, а затем добавляют (фиксируют) свои изменения, которые затем становятся такими же благословенными.Единственное реальное различие между CVS, Subversion, ClearCase, Perforce, VisualSourceSafe и всеми другими CVCS заключается в рабочем процессе, производительности и интеграции, которые предлагает каждый продукт.

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

Реальный выбор между использованием одного типа или другого зависит от организации - если ваш проект или организация хотят централизованного управления, то DVCS - это не стартер.Если от ваших разработчиков ожидается, что они будут работать по всей стране / миру, без безопасных широкополосных подключений к центральному хранилищу, то DVCS, вероятно, станет вашим спасением.Если вам нужно и то, и другое, вы fsck'd.

Другие советы

Для тех, кто думает, что распределенные системы не допускают авторитетных копий, пожалуйста, обратите внимание, что существует множество мест, где распределенные системы имеют авторитетные копии, идеальным примером, вероятно, является дерево ядра Linus.Конечно, у многих людей есть свои деревья, но почти все они тянутся к дереву Лайнуса.

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

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

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

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

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

На самом деле это не сравнение, но вот что используют крупные проекты:

Централизованные VCSES

Распределенные VCSEES

  • мерзавец

    Ядро Linux, KDE, Perl, Ruby on Rails, Android, Wine, Fedora, X.org , Mediawiki, Django, VLC, Mono, Gnome, Samba, CUPS, GnuPG, Emacs ELPA...

  • ртутный (hg)

    Mozilla и Mozdev, OpenJDK (Java), OpenSolaris, ALSA, NTFS-3G, Dovecot, MoinMoin, mutt, PETSc, Octave, FEniCS, Aptitude, Python, XEmacs, Xen, Vim, Xine...

  • бзр

    Emacs, Apt, Mailman, MySQL, Squid, ...также продвигается в Ubuntu.

  • даркс

    ghc, ion, xmonad, ...популярен в сообществе Haskell.

  • ископаемое

    SQLite - файл

W.Крейг Трейдер сказал это о DVCS и CVC:

Если вам нужно и то, и другое, вы fsck'd.

Я бы не сказал, что ты fsck'd при использовании обоих способов.Практически разработчики, использующие инструменты DVCS, обычно пытаются объединить свои изменения (или отправить запросы на извлечение) в центральное расположение (обычно в ветку выпуска в репозитории выпуска).Существует некоторая ирония в отношении разработчиков, использующих DVCS, но в конце концов, придерживаясь централизованного рабочего процесса, вы можете начать задаваться вопросом, действительно ли распределенный подход лучше централизованного.

У DVCS есть некоторые преимущества по сравнению с CVCS:

  • Понятие однозначно распознаваемых коммитов делает отправку исправлений между одноранговыми узлами безболезненной.То есть.вы создаете патч как коммит и делитесь им с другими разработчиками, которым это нужно.Позже, когда все захотят объединиться, этот конкретный коммит распознается и может быть сравнен между ветвями, что снижает вероятность конфликта слияния.Разработчики, как правило, отправляют исправления друг другу с помощью USB-накопителя или электронной почты, независимо от того, какой инструмент управления версиями вы используете.К сожалению, в случае CVCS система управления версиями зарегистрирует коммиты как отдельные, не распознав, что изменения одинаковы, что приводит к более высокой вероятности конфликта слияния.

  • У вас могут быть локальные экспериментальные ветви (клонированные репозитории также можно считать ветвью), которые вам не нужно показывать другим.Это означает, что критические изменения не должны влиять на разработчиков, если вы ничего не продвигали вверх по течению.В CVCS, когда у вас все еще есть критические изменения, вам, возможно, придется работать в автономном режиме, пока вы не исправите их и не зафиксируете изменения к тому времени.Такой подход фактически сводит на нет цель использования управления версиями в качестве подстраховки, но в CVCS это неизбежное зло.

  • В современном мире компании обычно работают с оффшорными разработчиками (или, что еще лучше, они хотят работать из дома).Наличие DVCS помогает такого рода проектам, потому что это устраняет необходимость в надежном сетевом подключении, поскольку у каждого есть свое собственное хранилище.

... и некоторые недостатки, которые обычно имеют обходные пути:

  • У кого есть последняя редакция? В CVCS магистраль обычно имеет последнюю версию, но в DVCS это может быть не совсем очевидно.Обходной путь заключается в использовании правил поведения, по которым разработчики проекта должны прийти к соглашению, с каким репозиторием объединить свою работу.

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

  • В проприетарных проектах было бы катастрофой, если бы весь репозиторий стал общедоступным.Тем более, если недовольный или злонамеренный программист завладеет клонированным репозиторием.Утечка исходного кода - серьезная проблема для частных компаний.DVCS упрощает это, поскольку вам нужно только клонировать репозиторий, в то время как некоторые системы CM (такие как ClearCase) пытаются ограничить этот доступ.Однако, на мой взгляд, если в культуре вашей компании достаточно дисфункциональности, то никакой контроль версий в мире не поможет вам предотвратить утечку исходного кода.

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

  1. Лучшая инициатива SCM :Сравнение.Сравнение примерно 26 систем контроля версий.
  2. Сравнение программного обеспечения для контроля версий.Статья в Википедии, в которой сравнивается около 38 систем контроля версий, охватывающих такие темы, как технические различия, функции, пользовательские интерфейсы и многое другое.
  3. Распределенные системы контроля версий.Еще одно сравнение, но сосредоточенное в основном на распределенных системах.

В какой-то степени эти две схемы эквивалентны:

  • Распределенный VCS может тривиально эмулировать централизованный, если вы просто всегда отправляете свои изменения в какой-нибудь назначенный вышестоящий репозиторий после каждой локальной фиксации.
  • Централизованный венчурный капитал обычно не сможет эмулировать распределенный так же естественно, но вы можете получить что-то очень похожее, если будете использовать что-то вроде стеганое одеяло поверх всего этого.Quilt, если вы с ним не знакомы, - это инструмент для управления большими наборами исправлений поверх какого-либо восходящего проекта.Идея здесь заключается в том, что команда фиксации DVCS реализуется путем создания нового исправления, а команда push реализуется путем фиксации каждого выдающегося исправления в централизованном VCS и последующего удаления файлов исправлений.Это звучит немного неуклюже, но на практике это действительно работает довольно хорошо.

Сказав это, есть пара вещей, с которыми DVCSE традиционно справляются очень хорошо и из которых большинство централизованных VCSE делают что-то вроде хэша.Наиболее важным из них, вероятно, является ветвление:DVCS позволит очень легко разветвлять репозиторий или объединять ветви, которые больше не нужны, и будет отслеживать историю, пока вы это делаете.Нет никакой особой причины, по которой у централизованной схемы могли бы возникнуть проблемы с этим, но исторически сложилось так, что никто, похоже, еще не до конца разобрался в этом.Является ли это на самом деле проблемой для вас, зависит от того, как вы собираетесь организовать разработку, но для многих людей это важный фактор.

Другим несомненным преимуществом DVCSE является то, что они работают в автономном режиме.На самом деле мне это никогда особо не нравилось;В основном я занимаюсь разработкой либо в офисе (поэтому репозиторий находится в локальной сети), либо дома (поэтому есть ADSL).Если вы много занимаетесь разработкой на ноутбуках во время путешествий, то это может быть более важным для вас.

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

Распределенные венчурные капиталисты привлекательны во многих отношениях, но одним из недостатков, который будет важен для моей компании, является проблема управления файлами, не подлежащими объединению (обычно двоичными, напримерДокументы Excel).Subversion решает эту проблему, поддерживая свойство "svn: needs-lock", что означает, что вы должны получить блокировку для файла, не подлежащего объединению, прежде чем редактировать его.Это хорошо работает.Но этот рабочий процесс требует централизованной модели репозитория, что противоречит концепции DVCS.

Поэтому, если вы хотите использовать DVCS, он на самом деле не подходит для управления файлами, которые не подлежат объединению.

Я использую subversion уже много лет, и я был действительно доволен им.

Затем началось жужжание GIT, и мне просто нужно было это протестировать.И для меня главным преимуществом было разветвление.О боже.Теперь мне больше не нужно чистить свой репозиторий, возвращать несколько версий назад или делать какие-либо глупости, которые я делал при использовании subversion.В DVCS все дешево.Хотя я пробовал только fossil и git, но я использовал perforce, cvs и subversion, и похоже, что все dvcs имеют действительно дешевое ветвление и теги.Больше не нужно копировать весь код в одну сторону, и поэтому слияние - это просто легкий процесс.

Любой dvcs может быть настроен с помощью центрального сервера, но то, что вы получаете, помимо прочего

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

И вы можете работать без сети.

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

Чтобы оформить заказ Git : http://git-scm.com/
Для оформления заказа: : http://www.fossil-scm.org
Чтобы оформить заказ на Mercurial : https://www.mercurial-scm.org

Сейчас я могу порекомендовать только системы dvcs, и вы легко сможете использовать центральный сервер

Основной проблемой (помимо очевидной проблемы с пропускной способностью) является право собственности.

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

В идеале инструмент способен назначить владельца файлу, ветке или даже репозиторию.

Чтобы ответить на комментарии к этому ответу, вы действительно хотите, чтобы инструмент сообщал вам, кому что принадлежит, и тогда общайтесь (по телефону, мгновенным сообщениям или почте) с удаленным сайтом.
Если у вас нет механизма владения...вы будете "общаться", но часто слишком поздно ;) (т.е.:после выполнения параллельной разработки для идентичного набора файлов в одной и той же ветке.Фиксация может привести к беспорядку)

Для меня это очередная дискуссия о личном вкусе, и довольно трудно быть по-настоящему объективным.Лично я предпочитаю Переменчивый поверх других видеорегистраторов.Мне нравится писать хуки на том же языке, что и Переменчивый это прописано и в меньших сетевых накладных расходах - просто чтобы назвать некоторые из моих собственных причин.

В наши дни все спорят о том, насколько DVCSS превосходны, но комментарий Крейга важен.В DVCS у каждого пользователя есть вся история филиала.Если вы работаете с большим количеством двоичных файлов (например, файлов изображений или FLA), для этого требуется огромное количество места, и вы не можете выполнять различия.

У меня такое ощущение, что Mercurial (и другие DVC) более сложны, чем централизованные.Например, при объединении ветки в Mercurial сохраняется полная история ветки, тогда как в SVN вам нужно перейти в каталог ветки, чтобы просмотреть историю.

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

Допустим, у вас есть набор общих сценариев.Если у каждой машины, на которой вы работаете, есть клон, вы можете по требованию обновлять и изменять свои скрипты.Это дает вам:

  1. экономия времени, особенно с ssh-ключами
  2. способ разделения различий между различными системами (например,Red Hat против Debian, BSD против Linux и т.д.)

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

Централизованная система не обязательно запрещает вам использовать отдельные ветви для разработки.Не обязательно должна быть единственная истинная копия базы кода, скорее у разных разработчиков или команд могут быть разные ветви, могут существовать устаревшие ветви и т.д.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top