Используете ли вы распределенный контроль версий?

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

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хотел бы услышать от людей, которые используют распределенный контроль версий (он же распределенный контроль версий, децентрализованный контроль версий), и как они его находят.Что вы используете, Mercurial, Darcs, Git, Bazaar?Вы все еще пользуетесь им?Если вы использовали RCS клиент / сервер в прошлом, считаете ли вы, что это лучше, хуже или просто отличается?Что бы вы могли мне сказать такого, что заставило бы меня вскочить на подножку?Или спрыгнуть, если уж на то пошло, мне было бы интересно услышать и от людей с негативным опытом.

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

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

Если вы не уверены, что такое распределенный контроль версий, вот пара статей:

Введение в распределенный контроль версий

Статья в Википедии

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

Решение

Я использую Mercurial как на работе, так и в своих личных проектах, и я действительно доволен этим.Преимущества, которые я вижу, заключаются в следующем:

  1. Локальный контроль версий. Иногда я работаю над чем-то и хочу сохранить историю версий для этого, но я не готов отправлять это в центральные репозитории.С распределенными VCS я могу просто зафиксировать свой локальный репозиторий до тех пор, пока он не будет готов, без ветвления.Таким образом, если другие люди внесут изменения, которые мне нужны, я все равно смогу получить их и интегрировать в свой код.Когда я буду готов, я отправлю его на серверы.
  2. Меньше конфликтов слияния. Они все еще случаются, но, похоже, реже и представляют меньший риск, потому что весь код возвращается в мое локальное репозиторий, так что даже если я провалю слияние, я всегда могу создать резервную копию и сделать это снова.
  3. Разделяйте репозитории как ветви. Если у меня есть пара векторов разработки, запущенных одновременно, я могу просто создать несколько клонов своего репозитория и разрабатывать каждую функцию независимо.Таким образом, если что-то сломается или соскользнет, мне не придется вытаскивать куски.Когда они будут готовы к работе, я просто объединю их вместе.
  4. Скорость. С Mercurial работать намного быстрее, главным образом потому, что большинство ваших обычных операций являются локальными.

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

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

Там, где я работаю, мы решили перейти с SVN на Bazaar (после оценки git и mercurial).Начать работу с Bazaar было легко, с простых команд (не таких, как 140 команд, которые есть в git).

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

Одна команда в bzr, которая мне нравится, - это расширение shelve .Если вы начинаете работать над двумя логически разными фрагментами кода в одном файле и хотите зафиксировать только один фрагмент, вы можете использовать расширение shelve, чтобы буквально отложить остальные изменения на потом.В Git вы можете сделать то же самое, поиграв с индексом (промежуточная область), но у bzr для этого есть лучший пользовательский интерфейс.

Большинство людей неохотно переходили, поскольку им приходилось вводить две команды для фиксации и нажатия (bzr ci + bzr push).Также им было трудно понять концепцию ветвей и слияния (никто не использует ветви и не объединяет их в svn).

Как только вы это поймете, это повысит производительность разработчика.До тех пор, пока все это не поймут, у всех будет непоследовательное поведение.

На моем рабочем месте мы перешли на Git из CVS около двух месяцев назад (большая часть моего опыта связана с Subversion).Несмотря на то, что знакомство с распределенной системой требовало некоторого обучения, я обнаружил, что Git превосходит меня в двух ключевых областях:гибкость рабочей среды и слияние.

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

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

В настоящее время моя компания использует Subversion, CVS, Mercurial и git.

Когда мы начинали пять лет назад, мы выбрали CVS, и мы до сих пор используем его в моем подразделении для нашей основной ветки разработки и сопровождения релизов.Тем не менее, многие из наших разработчиков используют Mercurial индивидуально как способ иметь частные контрольные точки без необходимости создавать филиалы CVS (и особенно объединять их), и мы начинаем использовать Mercurial для некоторых филиалов, в которых работает до 5 человек.Есть хороший шанс, что мы, наконец, откажемся от CVS в следующем году.Наше использование Mercurial органически возросло;некоторые люди до сих пор даже не прикасаются к нему, потому что их устраивают резюме.Все, кто пробовал Mercurial, в конечном итоге остались довольны им, без особых усилий по обучению.

Что действительно хорошо работает для нас с Mercurial, так это то, что наши серверы непрерывной интеграции (домашнего производства) могут отслеживать репозитории Mercurial для разработчиков, а также основную линию.Итак, люди регистрируются в своем репозитории, заставляют наш сервер непрерывной интеграции проверить это, а затем публикуют набор изменений.Мы поддерживаем множество платформ, поэтому выполнить проверку вручную на достойном уровне не представляется возможным.Еще один выигрыш заключается в том, что слияния часто даются легко, а когда они даются с трудом, у вас есть информация, необходимая для хорошей работы по слиянию.Как только кто-то запускает объединенную версию в работу, он может нажать на свои наборы изменений слияния, и тогда никому больше не придется повторять это усилие.

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

Mercurial и CVS хорошо работают у нас с разработчиками, использующими сочетание Windows, Linux и Solaris, и я не заметил никаких проблем с часовыми поясами.(На самом деле, это не так уж сложно;вы просто используете epoch seconds внутренне, и я бы ожидал, что все основные системы SCM понимают это правильно).

Приложив изрядные усилия, стало возможным импортировать нашу основную историю резюме в Mercurial.Было бы проще, если бы люди намеренно не вносили угловые обращения в нашу основную историю резюме, чтобы протестировать инструменты переноса истории.Это включало в себя объединение некоторых ветвей Mercurial в историю CVS, так что проект выглядит так, как будто он использовался с первого дня.

Наша группа разработчиков silicon выбрала Subversion.В основном они находятся в восьми часовых поясах от моего офиса, и даже по довольно хорошей выделенной линии между нашими офисами проверка SUbversion болезненна, но выполнима.Большим преимуществом централизованных систем является то, что вы потенциально можете загружать в них большие двоичные файлы (напримеррелизы поставщиков), не делая все распределенные репозитории огромными.

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

Я сам не использую распределенный контроль исходных текстов, но, возможно, эти связанные вопросы и ответы дадут вам некоторое представление:

Я лично использую систему управления версиями Mercurial.Я пользуюсь им уже чуть больше года.На самом деле это был мой первый опыт работы с VSC.

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

У меня есть 2 способа поделиться своим кодом с людьми:

  • Я делю сервер с коллегой, и мы сохраняем основное репозиторий для нашего проекта.
  • Для некоторого проекта OSS, над которым я работаю, мы создаем исправления нашей работы с Mercurial (hg export), а разработчик проекта просто применяет их в репозитории (hg import)

С ним действительно легко работать, но при этом он очень мощный.Но, как правило, выбор VSC действительно зависит от потребностей нашего проекта...

Еще до того, как мы отключили рабочие станции Sun от разработки встраиваемых систем, мы использовали Sun Командное программное обеспечение решение.TeamWare - это полностью дистрибутивное решение, использующее SCCS в качестве системы редактирования файлов локального репозитория, а затем дополняющее ее набором инструментов для обработки операций объединения (выполняемых путем переименования ветвей) обратно в централизованные репозитории, которых может быть много.Фактически, поскольку он распространяется, на самом деле нет главного репозитория как такового (за исключением соглашения, если вы этого хотите), и у всех пользователей есть свои собственные копии всего дерева исходных текстов и ревизий.Во время операций "вернуть" инструмент слияния, использующий 3-сторонние различия, алгоритмически сортирует, что есть что, и позволяет объединить изменения от разных разработчиков, которые накопились с течением времени.

После перехода на Windows для нашей платформы разработки мы в конечном итоге переключились на АккуРев.Хотя AccuRev, поскольку он зависит от централизованного сервера, на самом деле не является распределенным решением, логически модель рабочего процесса очень близка к этому.Там, где у TeamWare были бы полностью отдельные копии всего на каждом клиенте, включая все ревизии всех файлов, в AccuRev это поддерживается в центральной базе данных, а на локальных клиентских компьютерах есть только текущая версия файлов для локального редактирования.Однако эти локальные копии могут быть версифицированы через клиентское соединение с сервером и отслеживаться полностью отдельно от любых других изменений (т. е.:ветви), неявно созданные другими разработчиками

Лично я считаю, что распределенная модель, реализованная TeamWare, или своего рода гибридная модель, реализованная AccuRev, превосходит полностью централизованные решения.Основная причина этого заключается в том, что нет никакого понятия о необходимости извлекать файл или о том, что файл заблокирован другим пользователем.Кроме того, пользователям не нужно создавать или определять ветви;инструменты делают это за вас неявно.Когда есть более крупные команды или разные команды, вносящие свой вклад в создание или поддержание набора исходных файлов, это устраняет связанные с блокировкой коллизии, связанные с "сгенерированными инструментом", и позволяет лучше координировать изменения кода на уровне разработчика, которому в конечном итоге все равно приходится координировать изменения.В некотором смысле распределенная модель допускает гораздо более мелкозернистую "блокировку", чем поэтапная блокировка, устанавливаемая централизованными моделями.

Я использовал darcs в большом проекте (GHC) и для множества небольших проектов.У меня отношения любви / ненависти с darcs.

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

Минусы:никакого понятия об истории - вы не можете восстановить "положение вещей на 5 августа".Я так и не понял, как использовать darcs, чтобы вернуться к более ранней версии.

Нарушитель условий сделки:darcs не масштабируется.У меня (и многих других) возникли большие проблемы с GHC, использующим darcs.Я должен был его повесить со 100% ЦП в течение 9 дней пытаются втянуть в Стоит 3 месяца изменения.Прошлым летом у меня был неудачный опыт, когда я потерял две недели пытаясь заставить darcs функционировать, и в итоге мне пришлось вручную воспроизвести все мои изменения в нетронутом репозитории.

Заключение:darcs отлично подходит, если вам нужен простой и облегченный способ не дать себе прострелить ногу ради ваших хобби-проектов.Но даже с учетом некоторых проблем с производительностью, устраненных в darcs 2, это все равно не для промышленного использования.Я не буду по-настоящему верить в darcs до тех пор, пока хваленая "теория исправлений" не станет чем-то большим, чем несколько уравнений и несколько красивых картинок;Я хочу увидеть реальную теорию, опубликованную в авторитетном месте.Давно пора.

Я действительно люблю Git, особенно с GitHub.Так приятно иметь возможность фиксировать и откатывать локально.И слияния по выбору вишни, хотя и не являются тривиальными, не так уж сложны и намного более продвинуты, чем все, что могут сделать Svn или CVS.

Моя группа на работе использует Git, и это стало самой большой разницей в мире.Мы использовали SCCS и кипу csh-скриптов для управления довольно большими и сложными проектами, которые разделяли код между собой (по крайней мере, пытались).

С помощью Git поддержка подмодулей упрощает многое из этого, и требуется лишь минимум сценариев.Наши усилия по разработке релизов значительно сократились, потому что ветви просты в обслуживании и отслеживании.Возможность дешевого ветвления и объединения действительно позволяет достаточно легко поддерживать единую коллекцию источников в нескольких проектах (контрактах), в то время как раньше любое нарушение обычного потока операций было очень, очень дорогостоящим.Мы также обнаружили, что скриптабельность Git является Огромный плюс, потому что мы можем настроить его поведение с помощью перехватов или скриптов, которые делают . git-sh-setup, и это уже не похоже на кучу клочьев, как раньше.

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

Отчасти это просто то, что мы вышли из начала 80-х и внедрили некоторые современные механизмы контроля версий, но Git "сделал это правильно" в большинстве областей.

Я не уверен в объеме ответа, который вы ищете, но наш опыт работы с Git был очень, очень положительным.

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

Я большой сторонник централизованного управления версиями по многим причинам, но я ненадолго попробовал BitKeeper в проекте.Возможно, после многих лет использования централизованной модели в том или ином формате (Perforce, Subversion, CVS) Я просто обнаружил, что распределенное управление версиями сложно использовать.

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

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

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

у bzr также есть отличный плагин (bzr-svn), позволяющий вам работать с репозиторием subversion.Вы можете создать копию репозитория svn (что изначально занимает некоторое время, поскольку оно извлекает всю историю для вашего локального репозитория).Затем вы можете создавать ответвления для различных функций.Если вы хотите быстро исправить магистраль на полпути к своей функции, вы можете создать дополнительную ветку, поработать в ней, а затем объединить обратно в магистраль, оставив вашу наполовину выполненную функцию нетронутой и за пределами магистрали.Чудесно.Работа против subversion была моим основным применением до сих пор.

Обратите внимание, что я использовал его только в Linux, и в основном из командной строки, хотя он предназначен для хорошей работы на других платформах, имеет графические интерфейсы, такие как Черепаховый БЗР и в настоящее время проводится большая работа по интеграции с Иды и тому подобное.

Я играю с Mercurial для своих домашних проектов.Пока что, что мне в этом нравится, так это то, что у меня может быть несколько репозиториев.Если я беру свой ноутбук в домик, у меня по-прежнему есть контроль версий, в отличие от того, когда я запускал CVS дома.Ветвление так же просто, как hg clone и работаю над клоном.

Использование Subversion

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

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

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

Мост git-svn немного шаткий, потому что при регистрации в SVN он переписывает все коммиты, чтобы добавить свой комментарий git-svn-id.Это разрушает приятную историю слияний между репо моего коллеги и моим.Я предсказываю, что мы бы вообще не использовали центральный репозиторий, если бы каждый член команды использовал Git.

Вы не сказали, на какой операционной системе вы разрабатываете, но у Git есть недостаток в том, что вам приходится использовать командную строку, чтобы получить все функции.Gitk - это хороший графический интерфейс для визуализации истории слияний, но само слияние должно выполняться вручную.Git-Gui и плагины Visual Studio еще не настолько отшлифованы.

Мы используем распределенный контроль версий (Пластиковый SCM) как для сценариев с несколькими сайтами, так и для несвязанных сценариев.

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

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

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