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

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

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

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

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

Введение в управление распределенной версией

Запись в Википедии

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

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

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

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

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

Ответ 6

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

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

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

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

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

Ответ 7

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

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

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

Ответ 8

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

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

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

Deal-breaker: darcs не масштабируется. Я (и многие другие) столкнулся с большими проблемами с GHC, используя darcs. У меня было это зависание с 100% загрузкой процессора в течение 9 дней, пытаясь втянуть Изменения в 3 месяца. У меня был плохой опыт прошлым летом, когда я потерял две недели пытаясь сделать функцию darcs и в конечном итоге прибегнуть к повторному воспроизведению всех моих изменений вручную в нетронутом репозитории.

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

Ответ 9

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

Ответ 10

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

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

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

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

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

Ответ 11

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

Ответ 12

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

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

Ответ 13

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

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

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

Примечание. Я использовал его только в Linux, и в основном из командной строки, хотя он предназначен для работы на других платформах, имеет графические интерфейсы, такие как TortoiseBZR, и проделана большая работа по интеграции с IDE и т.п.

Ответ 14

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

Ответ 15

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

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

Ответ 16

Используется darcs 2.1.0 и отлично подходит для моих проектов. Легко использовать. Изменения в вишневой зависти.

Ответ 17

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

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

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

Ответ 18

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

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

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