Чи є незручність злиття в SVN до версії v1.5 застарілою до теперішнього часу, коли відсутність метаданих вже не відбувається?


11

Я починаю працювати з SVN, і так багато джерел кажуть, що об'єднувати SVN дуже важко порівняно з інструментами DVCS. В останні питання я міг би знайти тут на РЕ з 2012 року.

Іноді згадується, що причина полягає в тому, що SVN до v1.5 не мав метаданих, але SVN зараз у версії 1.8.9.

Зважаючи на те, що SVN зараз набагато зріліший ніж v1.5, і особливо той факт, що ми не використовували SVN 1.5, щоб ми не страждали від згаданої відсутності метаданих - чи є ще велика обґрунтованість у цих аргументах проти SVN?

Я розумію, що DVCS має зовсім інший підхід, який часто є більш бажаним, але для тих, хто "повинен" використовувати SVN з будь-якої причини, злиття вже насправді не "пекло", чи не так?


3
@ TorbenGundtofte-Bruun - У мене зараз немає часу, щоб дати таку відповідь, але я скажу "не бійтеся SVN". Він має обмеження, але це стосується і DVCS.
kdgregory

Відповіді:


15

Це добре працює, якщо ви дотримуєтеся простих випадків , але є деякі складні, які цього не роблять.

Обмеження, про які я можу придумати:

  • Він може знайти самого останнього предка, лише якщо він знаходиться на одній із задіяних гілок. Так що, якщо ви створюєте branches/thisі branches/thatяк з , trunkа потім спробувати об'єднати , branches/thisщоб branches/thatвін не знатиме , що робити. Що означає, що ви можете злити гілку лише з її батьківською родиною. Ви можете зіткнутися з цим, якщо запустити дві гілки функцій і пізніше зрозуміти, що функції взаємозалежні і потрібно їх поєднувати.

  • Хоча він стверджує, що він може відслідковувати перейменування, об'єднання гілок, коли файли переміщувались з одного боку та змінювались з іншого, не завжди знаходить потрібні файли для злиття, а виправлення вручну - дещо стомлююче, оскільки не залишає необхідної інформації ніде рукою.

  • Додані файли іноді викликають помилкові конфлікти при пізніших злиттях.

  • Оскільки у підривної системи немає окремої концепції гілки, ви можете об'єднати лише підгрупу проекту, і це може призвести до великого безладу досить швидко. Настійно рекомендується подбати про те, щоб завжди зливати цілі гілки. На жаль, чомусь властивості інформації про злиття з’являються у підкаталогах, навіть якщо вони здаються зайвими, і об'єднання було зроблено правильно для всієї гілки.

  • І останнє, але не менш важливе - це повільно . Об'єднання в проект будь-якого серйозного розміру часто займає кілька хвилин, коли більшість DVCS можуть це робити за секунду.


+1, чудова відповідь. Справа про спільного предка - це те, на що я повинен бути уважним. Чи є у вас посилання на ці факти?
Doval

1
@Doval: досвід.
Ян Худек,

можливо також варто згадати, що svn також не має окремої концепції тегів
jk.

Що стосується вашої першої кулі (спасибі за дуже чітке пояснення!), Чи не можна її вирішити, використовуючи гілку накопичення, яка має ту саму точку розгалуження, що й гілки функцій? (на основі Vance98 ) Чи справді проблема виникає лише тоді, коли дві гілки функцій мають різні точки відгалуження?
Torben Gundtofte-Bruun

@ TorbenGundtofte-Bruun: Останній звичайний предок не повинен бути точкою гілки. Ви можете знайти його самостійно і підказати підривникові застосувати зміни між певними переглядами прив’язки. Але проблема полягає в тому, що це багато роботи, і ти повинен усвідомити, що ти повинен це зробити, тому що підрив не обов'язково кидає вгору руки, кажучи, що він не може злитися. Натомість він може знайти спільного предка, який не є останнім та породжує безліч конфліктів.
Ян Худек

1

З мого досвіду, об’єднання в SVN було «зафіксовано» у версії 1.6. Я працюю і в Mercurial, і в SVN, і оскільки версія 1.6 SVN, злиття, здається, приблизно однакова, як на обох платформах. Єдиним винятком може бути те, що вам потрібно пам’ятати, щоб надати цей --reintegrateпараметр під час об’єднання з гілки назад у магістраль за допомогою SVN.

Це лише мій досвід роботи. Я нічого не знаю про внутрішні місця SVN.


2
1.8, нарешті, може виявити «реінтегрувати» справу, на щастя. Але це піклується лише про останнього спільного предка на місцевому або віддаленому рівні. Він все ще не може знайти його на третьому відділенні.
Ян Худек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.