Почему ветвление и слияние легче в Подвижном, чем в Подверсии?

Для гуглеров я также получил эту ошибку, включив SwiftyJson в мою целевую аудиторию и добавив быстрый тестовый класс, поскольку он заставил SwiftyJson снова скомпилироваться и объявляет NSNumber как Comparable. Решение должно было включать его только в целевую программу.

92
задан Nick Pierpoint 3 October 2008 в 16:12
поделиться

6 ответов

В Подрывной деятельности (и CVS), репозиторий прежде всего. В мерзавце и подвижный нет действительно понятия репозитория таким же образом; здесь изменения являются центральной темой.

+1

стычка в CVS/SVN прибывает из того, что эти системы делают не , помнят статус родителя изменений. В Мерзавце и Подвижный, мало того, что фиксация может иметь несколько детей, она может также иметь несколько родителей!

, Который может легко наблюдаемое использование одного из графических инструментов, gitk или hg view. В следующем примере ответвление № 2 было разветвлено от № 1 в фиксации A и было с тех пор объединено однажды (в M, объединенном с фиксацией B):

o---A---o---B---o---C         (branch #1)
     \       \
      o---o---M---X---?       (branch #2)

Примечание, как A и B имеют двух детей, тогда как M имеет два родители . Эти отношения , записал в репозитории. Скажем, специалист по обслуживанию ответвления № 2 теперь хочет объединить последние изменения от ответвления № 1, они могут дать команду, такую как:

$ git merge branch-1

и инструмент будет автоматически знать, что основой является B - потому что это было зарегистрировано в фиксации M, предке подсказки № 2 - и что это должно объединиться что бы ни случилось между B и C. CVS не записывает эту информацию, ни сделал SVN до версии 1.5. В этих системах график был бы похож:

o---A---o---B---o---C         (branch #1)
     \    
      o---o---M---X---?       (branch #2)

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

Что еще хуже, выполнение второго слияния становится кошмаром: нужно выяснить то, чем основа слияния была во время первого слияния (и один имеет к [1 111], знают , что было слияние во-первых!), затем представьте ту информацию инструменту так, чтобы это не пыталось воспроизвести A.. B сверху M. Все это достаточно трудно при работе в тесном сотрудничестве, но просто невозможно в распределенной среде.

А (имел отношение), проблема состоит в том, что нет никакого способа ответить на вопрос: "X содержат B?" где B является потенциально важным исправлением ошибки. Так, почему не только запись, что информация в фиксации, так как это известно во время слияния!

P.S. - у меня нет опыта с SVN 1.5 + способности к записи слияния, но рабочий процесс, кажется, намного более изобретен, чем в распределенных системах. Если это действительно имеет место, это, вероятно, потому что - как упомянуто в вышеупомянутом комментарии - фокус помещается на организацию репозитория, а не на сами изменения.

115
ответ дан Damien Diederen 5 November 2019 в 13:47
поделиться

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

4
ответ дан Evil Andy 5 November 2019 в 13:47
поделиться

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

12
ответ дан htanata 5 November 2019 в 13:47
поделиться

В Подрывной деятельности (и CVS), репозиторий прежде всего. В мерзавце и подвижный нет действительно понятия репозитория таким же образом; здесь изменения являются центральной темой.

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

3
ответ дан Stephen Darlington 5 November 2019 в 13:47
поделиться

У меня только есть опыт с Подрывной деятельностью, но я могу сказать Вам, что экран слияния в TortoiseSVN является ужасно сложным. К счастью они включают кнопку пробного прогона так, чтобы Вы видели, делаете ли Вы ее правильно. Сложность находится в конфигурации того, что Вы хотите объединить туда, где. Как только Вы будите тот набор для слияния, слияние обычно идет прекрасное. Тогда необходимо разрешить любого и все конфликты и затем фиксировать объединенный в рабочей копии в репозиторий.

, Если бы Подвижный может сделать конфигурацию слияния легче тогда, я могу сказать, что это сделало бы слияние на 100% легче тогда Подрывная деятельность.

1
ответ дан RedWolves 5 November 2019 в 13:47
поделиться

Не тронутый ни одним из уже предоставленных ответов, Hg предлагает превосходные возможности слияния, поскольку он использует больше информации при слиянии изменений ( hginit.com ):

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

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

Оба улучшения, однако, сомнительны, поскольку subversion 1.5+ хранит дополнительную информацию о слиянии в форме свойств subversion: эта информация доступна, нет очевидной причины, по которой слияние subversion не могло реализовать слияние так же успешно, как Hg или Git. Я не знаю, правда ли, но похоже, что разработчики подрывной деятельности пытаются обойти эту проблему.

7
ответ дан 24 November 2019 в 06:33
поделиться