Управление исходным кодом - распределенные системы и нераспределенные - какая разница?

Я только что прочитал последнюю статью Спольского о распределенной и нераспределенной системах контроля версий http://www.joelonsoftware.com/items/2010/03/17.html. Какая разница между этими двумя? Наша компания использует TFS. В каком лагере это падение?

6 ответов

Решение

Проще говоря, централизованная система VCS (включая TFS) имеет центральное хранилище, и каждый пользователь получает и фиксирует это единственное местоположение.

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

Разница в процессе публикации:

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

,

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

Система контроля версий заключается в том, чтобы справляться со сложностью изменений в данных (из-за параллельных задач и / или параллельных работ над одной задачей), а способ совместной работы с другими (другими задачами и / или другими людьми) в CVCS сильно отличается и DVCS.

TFS ( Team Foundation Server) - это система управления проектами, которая включает в себя CVCS: Team Foundation Version Control (TFVC), сосредоточенную вокруг понятия "рабочий элемент".
Его централизованный аспект обеспечивает согласованность (других элементов, кроме просто источников)
См. Также этот документ VSS to TFS, который иллюстрирует, как он адаптирован для команды, имеющей доступ к одной ссылке.
Одна ссылка означает, что ее легче поддерживать (без синхронизации или обновления данных), следовательно, в ней управляется большее количество элементов (списки задач, планы проекта, проблемы и требования).

Проверьте http://hginit.com/. Джоэл написал хороший урок для Mercurial, который является DVCS. Я раньше не читал о DVCS (я всегда использовал SVN), и мне было легко это понять.

Централизованная VCS (CVCS) включает центральный сервер, с которым взаимодействуют. Распределенная VCS (DVCS) не нуждается в централизованном сервере.

Проверки DVCS являются полными и автономными, включая историю репозитория. Это не относится к CVCS.

С CVCS большинство действий требуют взаимодействия с сервером. С DVCS это не так, так как это "полные" проверки, история репо и все.

Вам нужен доступ на запись для фиксации в CVCS; пользователи DVCS "вытягивают" изменения друг из друга. Это приводит к большему социальному кодированию, чему способствуют GitHub и BitBucket.

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

Разница огромная.

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

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

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

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

Я бы порекомендовал прочитать обзор Мартина Фаулера об инструментах контроля версий

Короче говоря, ключевое различие между CVCS и DVCS заключается в том, что первые (из которых TFS является примером) имеют один центральный репозиторий кода, а во втором случае есть несколько репозиториев, и никто не является "по умолчанию" центральным - они все равны

Другие вопросы по тегам