Використовуючи TortoiseSVN, як я зливаю зміни зі стовбура до гілки та навпаки?


132

Я читав про розгалуження / злиття з Subversion 1.5, використовуючи відмінний та безкоштовний контроль версій із програмою Subversion . Я думаю, що я розумію, як використовувати клієнт командного рядка Subversion для виконання дій, які мені найчастіше потрібні, а саме:

Оновіть відділення зі змінами магістралі

З робочого каталогу філії запустіть:

svn злиття http://svn.myurl.com/proj/trunk

Об’єднати відділення в магістраль

З робочого каталогу ствола запустіть:

svn merge --реінтегрувати http://svn.myurl.com/proj/branches/mybranch

Однак ми використовуємо TortoiseSVN 1.5 як наш інтерфейс до Subversion. Я хотів би знати, як найкраще виконувати ці операції з TortoiseSVN. Нове діалогове вікно містить три різні параметри головного меню.

  1. Об’єднайте ряд змін
  2. Реінтегруйте гілку
  3. Об’єднайте два різних дерева

З того, що я можу зібрати, TortoiseSVN завжди виконує svn із наступним синтаксисом.

svn merge [--dry-run] --force From_URL @ revN To_URL @ revM PATH

Крім того, повторне інтегрування гілки часто провалюється з повідомленням про те, що деякі цілі не були об'єднані, і тому вона не може продовжуватися, і тому мені довелося використовувати варіант №3.

Мої запитання:

  1. Як використовувати TortoiseSVN 1.5 для об'єднання змін зі стовбура у гілку?
  2. Як використовувати TortoiseSVN 1.5 для злиття гілки до стовбура, із методом реінтеграції та без нього?
  3. Який із перерахованих вище варіантів слід використовувати для кожного та чому?

EDIT

Завдяки тестуванню "сухого запуску" я виявив, що командний рядок Subversion працює

svn злиття http://svn.myurl.com/proj/trunk

є аналогом варіанту №1 (Об'єднати діапазон редакцій) у TortoiseSVN, якщо я залишаю порожній ряд ревізії порожнім.


Посилання не знайдено! = /
Леонардо Коста

Відповіді:


28

Поведінка залежить від того, яку версію має ваше сховище. Subversion 1.5 дозволяє 4 типи злиття:

  1. злиття джерелаURL1 [@N] джерелоURL2 [@M] [WCPATH]
  2. джерело злиттяWCPATH1 @ N джерелоWCPATH2 @ M [WCPATH]
  3. злиття [-c M [, N ...] | -r N: M ...] ДЖЕРЕЛО [@REV] [WCPATH]
  4. злиття - реінтегрувати ДЖЕРЕЛА @ @ REV] [WCPATH]

Subversion до 1,5 дозволяла лише перші 2 формати.

Технічно ви можете виконати всі злиття за допомогою перших двох методів, але останні два дозволяють відстежувати злиття підривної 1.5.

Параметри TortoiseSVN об'єднують діапазон або переглядають карти до методу 3, коли ваш сховище 1,5+, або до методу, коли ваш сховище старше.

Під час об'єднання функцій до гілки випуску / обслуговування слід використовувати команду "Об'єднати діапазон змін".

Тільки коли ви хочете об'єднати всі функції гілки назад з батьківською гілкою (зазвичай стовбур), вам слід розглянути можливість використання "Реінтегрувати гілку".

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


хтось, будь ласка, допоможе мені з stackoverflow.com/questions/51657636/… . Це важливе питання для нашої команди, нам потрібні деякі ідеї навколо неї.
ankur

249

Я не міг належним чином дотримуватися інших відповідей, ось докладніший посібник про манекенів ...

Ви можете зробити це або навпаки йти trunk -> branchабо branch -> trunk. Я завжди спочатку trunk -> branchвиправляю там будь-які конфлікти, а потім зливаюся branch -> trunk.

Об’єднати стовбур у гілку / тег

  1. Оформити відділення / тег
  2. Клацніть правою кнопкою миші на корені гілки | Черепаха SVN | Об’єднання ...
  3. Тип злиття: Об’єднати діапазон змін | Натисніть "Далі" введіть тут опис зображення
  4. Об’єднати діапазон версій: Виберіть URL-адресу каталогу магістралей, яку ви скопіювали у гілку / тег. Введіть версії для об'єднання або залиште поле порожнім, щоб об'єднати всі версії | натисніть "Далі" введіть тут опис зображення
  5. Параметри злиття: я просто залишив їх за замовчуванням | натисніть "Об’єднати" введіть тут опис зображення
  6. Це об'єднає зміни до перевіреної гілки / тегу
  7. Потім введіть об'єднані зміни у гілку / тег

4
Я залишив "Діапазон ревізії для злиття" і зробив "Тест злиття". Це було те, що мені було потрібно: діапазон був автоматично встановлений для мене (з моменту, коли філія була зроблена до останньої редакції у гілці)
Lian

Чудова відповідь - лаконічний і простий у дотриманні. Це працювало для мене, але коли я просто хотів об'єднати один файл конфігурації, мені чомусь довелося це зробити двічі. Зараз все добре. Ура
Вінгер

@Lian Я зробив те саме, що злилося зі стовбура у гілку; залиште діапазон редагувань порожнім, якщо ви хочете, щоб остання версія файлів із стовбура була об'єднана з файлами гілки.
Вінгер

2
У поточній версії Tortoise SVN тепер є можливість об'єднати всі версії замість того, щоб залишити діапазон редакцій порожнім на кроці 4.
Невідомий Dev

1
@Onkar Деякі конфлікти майже завжди трапляться. Якщо у вас є дві гілки, наприклад , trunkі branch, потім , переконавшись , що ви зливаєте зміни від trunkдо branchякомога швидше дозволить уникнути конфліктів настільки , наскільки можливо. Це означатиме, що при злитті branchна них trunkне повинно виникати конфліктів.
icc97

12

Вам слід використовувати "об'єднати діапазон доопрацювання".

Щоб об'єднати зміни зі стовбура до гілки, всередині робочої копії гілки виберіть "Об'єднати діапазон змін" та введіть URL-адресу стовбура та початок та кінець ревізій для об'єднання.

Те саме в протилежному способі злиття гілки в стовбур.

Про прапор --reintegrate перегляньте посібник тут: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate


1

Погляньте на svnmerge.py . Це командний рядок, TortoiseSVN не може викликати, але він є більш потужним. З FAQ :

Традиційний підрив дозволить вам злити зміни, але він не «пам’ятає» те, що ви вже зробили. Він також не забезпечує зручний спосіб виключити набір змін зі злиття. svnmerge.py автоматизує деякі роботи та спрощує її. Svnmerge також створює повідомлення про фіксацію з повідомленнями журналу з усіх речей, які він об'єднав.


6
svnmerge.py був розроблений на Subversion 1.4 і новіших версіях. Subversion 1.5 вводить відстеження злиття в основний продукт.
Берт Хуйден

0

Натисніть клавішу Shift правою кнопкою миші на папці та виберіть TortoiseSVN -> Злиття всіх

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.