Переход от SVN к HG: ветвление и резервное копирование - PullRequest
7 голосов
/ 18 июня 2010

В моей компании сейчас работает svn, и мы с ней хорошо знакомы. Однако, поскольку мы выполняем много параллельных разработок, объединение может стать очень сложным. Мы играем с hg, и нам очень нравится возможность создавать быстрые и эффективные клоны для каждой функции.

У нас есть две основные проблемы, которые мы хотели бы решить, прежде чем перейти к hg:

  • Ветки для бывших пользователей SVN Я знаком с "4 способами ветвления в Mercurial", изложенными в Статья Стива Лоша . Мы думаем, что должны «материализовать» ветки, потому что я думаю, что команда разработчиков найдет этот самый простой способ перехода с SVN. Следовательно, я думаю, что мы должны следовать модели «ветвления с клонами», которая означает, что отдельные клоны для ветвей создаются на сервере. Хотя это означает, что каждый клон / ветвь необходимо создавать на сервере и публиковать отдельно, для нас это не слишком большая проблема, поскольку мы привыкли проверять ветви svn, которые представляются в виде отдельных копий. Однако меня беспокоит, что объединение изменений и последующая история могут стать трудными для разных ветвей в этой модели.
  • Резервное копирование Если программисты в нашей команде делают локальные клоны ветви, как они выполняют резервное копирование локального клона? Мы привыкли видеть подобные сообщения коммита svn в ветке функций «Промежуточная фиксация: функция db еще не работает». Я не вижу способа сделать это легко в hg.

Совет с благодарностью получен. Рори

Ответы [ 4 ]

2 голосов
/ 24 июля 2010

Я боюсь, однако, что слияние Изменения и последующая история могут стало трудно между ветвями в эта модель.

Ну, вы решили, что хотите хранить ветки в отдельных клонах, и это не бесплатно. Но это не большая проблема, чтобы установить файл конфигурации уровня репозитория, который псевдоним всех клонов для облегчения pusion / pull.

Если программисты в нашей команде делают локальные клоны ветки, как они бекапят местный клон? Мы привыкли видеть SVN фиксирует подобные сообщения на Особенность ветки "Временная фиксация": db функция еще не работает ". Я не вижу способ сделать это легко в HG.

Это причина номер один на самом деле использовать DVCS, потому что он отлично поддерживает этот вариант использования. Комитеты являются местными, пока вы не подтолкнете их. Это означает, что каждый разработчик может создавать столько «промежуточных» коммитов, сколько он считает нужным. НО это не «резервная копия» в первоначальном смысле, это скорее «точка сохранения» для отдельного разработчика. До сих пор вы загромождали свою историю теми временными коммитами, которые были доступны всем разработчикам в вашей команде. Используя ртутные очереди, вы можете легко «сложить» все эти временные коммиты вместе, прежде чем выдвинуть их, что приведет к чистой истории в вашем центральном хранилище.

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

0 голосов
/ 25 июля 2010

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

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

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

Subversion - отличная система контроля версий. Я часто его использую, и вы не можете превзойти цену, но давайте посмотрим правде в глаза, объединение в Subversion все еще очень, очень грубое по краям. Использование свойств для отслеживания слияния очень хакерское. Когда вы просматриваете журналы, вы видите множество изменений просто из-за того, что Subversion изменила свойство svn: merge, хотя файлы в основном не были затронуты. Кроме того, вы должны знать, когда следует использовать флаг --reintegrate.

Конечно, распределенные системы контроля версий обрабатывают параллельную разработку с помощью aplomb. Это то, как они были разработаны с самого начала.

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

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

Мы потратили бы следующую неделю, пытаясь все очистить и заставить все изменения разработчика работать вместе. QA был расстроен, потому что у них почти не было времени на тестирование. Нередко отправлять релиз не тестировали. В конце концов, мы должны были уложиться в сроки.

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

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

0 голосов
/ 24 июля 2010

Я не могу ответить на вашу проблему с миграцией в SVN.Ваше решение звучит нормально, но параллелизм ОЧЕНЬ ОЧЕНЬ СЛОЖЕН, и я недостаточно хорошо продумал вашу ситуацию, чтобы сказать.

Но предполагается, что вы создаете отдельный репозиторий на сервере для каждой "svn-branch"Тогда я верю, что вы можете решить свою вторую проблему очень легко.Во-первых, следуйте совету Питера Лорона , скопировав файлы для выполнения работы.Затем, когда разработчик готов зафиксировать «серверный репозиторий нашей команды» *, он может выполнить фиксацию, как «hg-branch»: в одном и том же репозитории.Вы получите тот же тип коммитов «Временный коммит: функция db еще не работает», но они не будут на стволе, облажая сборку каждого.

Ключ ко всему этому работает, иПричина, по которой hg / git так круты, состоит в том, что когда функция фактически выполнена, вы сливаете эту «hg-branch» обратно в транк в том же репозитории, и шансы гораздо лучше, чем с SVN, что автоматическое слияние будет просто работать.

0 голосов
/ 18 июня 2010

Предложение: также изучите мерзавца.

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

...