Об’єднайте стовбур з гілкою в Subversion


75

Я використовую Subversion 1.4.6 і зараз не можу оновити версію 1.5.

Ситуація:

  1. Магістраль має багато структурних змін (тобто переміщення файлів, переважно).

  2. У мене є гілка, яка нещодавно була об’єднана зі стовбура, але до основних змін.

Який найкращий спосіб об’єднати стовбур з гілкою?

Що я мав на увазі:

  1. Спочатку обережно об’єднайте гілку із стовбуром, об’єднавши у стовбур лише змінені файли у гілці.

  2. Скопіюйте стовбур у гілку. Який найкращий спосіб зробити це, не втрачаючи історії філій? Чи слід мені припинити гілку та створити нову?


Гаразд, схоже, я не надав SVN достатньо кредитів. Зрештою, це досить розумно. Мене просто затримало виведення "D" та "A", але у фоновому режимі це зробило хід.


1
Питання та відповіді стосуються дуже старих версій клієнта та сервера SVN і не стосуються SVN 1.5+ та особливо SVN 1.8+
bahrep

Відповіді:


88

Чи є щось, що заважає об’єднати всі ревізії на транку після останнього об’єднання?

svn merge -rLastRevisionMergedFromTrunkToBranch:HEAD url/of/trunk path/to/branch/wc

має працювати нормально. Принаймні, якщо ви хочете об'єднати всі зміни на магістралі з вашою гілкою.


3
Коли я сушив-запускав його, там було багато "D" та "A" для багатьох файлів, оскільки файли переносились у багажник. Моє питання полягає в тому, чи SVN пам’ятає історію файлів у цьому випадку.
Гілад Наор,

Чи використовували ви перейменування svn під час переміщення файлів у багажник? Якщо ви це зробили, історія повинна залишитися. Я думаю, вам слід спробувати це в невеликому масштабі - створити нове сховище, магістраль з одним файлом, гілку із зміною, зробити перейменування svn на магістралі та перевірити, чи існує історія.
Yuval F

1
Як я можу дізнатися, яка остання версія була об’єднана із стовбура в гілку?
Леандро Лопес,

1
в новіших версіях svn він зберігається як властивість файлу (десь ?, можливо, кореневий каталог). У попередній версії ця інформація не зберігається, її потрібно шукати вручну. тобто шукати в журналі фіксацію останнього злиття. (Це велика незручність. Git, Mercurial, Bazaar не мають цих обмежень)
Ронні Брендель

2
Хороший путівник доступний тут: stereointeractive.com/blog/2009/02/17/…
David d C e Freitas

16

Останню редакцію, об’єднану з магістралі у гілку, можна знайти, запустивши цю команду всередині каталогу робочої копії:

svn log -v --stop-on-copy

4
Це просто зупиняє журнал, коли гілка була створена; він не показує жодного злиття, що відбулося після цього моменту.
moswald

2
Оскільки, з цим невеликим застереженням від @moswald, це може бути дуже корисно знати. Я не бачу проблеми. У мене зазвичай немає довгоживучих гілок (щонайбільше один тиждень), тому я зазвичай тягну зі стовбура прямо перед реінтеграцією.
Andrew Backer

12

Це “старомодний” спосіб вказати діапазони версій, які ви хочете об’єднати. З 1,5+ ви можете використовувати:

svn merge HEAD url/of/trunk path/to/branch/wc

4
Я використовую 1.6.11, і це змушує мене ввести діапазон.
Brent212

18
Чи потрібно навіть стільки говорити? Що не так із 'svn merge / url / of / trunk' у робочій копії?
GreenAsJade

1
svn: E195002: Недійсне джерело злиття 'HEAD'; шлях робочої копії можна використовувати лише з ревізією сховища (числом, датою або головою)
Індивідуальний

2
@Solo HEAD справді вимагає від вас вказати номер редакції, але більше немає потреби використовувати HEAD. Як згадує GreenAsJade, "svn merge / url / of / trunk path / to / branch / wc" спрацював для мене.
Тім Сміт,

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