Как я могу использовать SVN для объединения изменений из папки репо в себя? - PullRequest
1 голос
/ 20 августа 2009

Я много занимался разработкой ветки в моем хранилище Subversion. Во всем этом я объединил изменения в стволе, отследив вручную, какие из них я вставил. Я случайно прочитал книгу SVN 1.0, в которой явно сказано, что SVN не отслеживает, какие изменения были объединены, поэтому я попытался указать, какие из них слиться с моей веткой, чтобы синхронизировать ее со стволом и всеми разработками, которые там происходили.

Проблема заключается в следующем: я пропустил много изменений при синхронизации. Я синхронизировал его с тем, что, по моему мнению, было обновлено несколько дней назад, а затем, чтобы вернуть его в ствол, я пометил и удалил текущий ствол, а затем скопировал свою ветку в ствол. Тем не менее, некоторые из разработок, которые были сделаны в стволе (на самом деле довольно много), были потеряны, потому что я не применял эти изменения до перемещения своей ветви в ствол и не включал svn merge --reintegrate (который применил бы мои изменения к багажнику). С тех пор ведется разработка этого нового транка (целая куча исправлений), поэтому я не могу действительно повторить слияние.

Важно: я на самом деле использую SVN 1.5, которая использует свойство svn: mergeinfo. Это здорово, потому что я точно знаю, какие ревизии я пропустил, однако я не могу заставить SVN их применять. Я попытался сделать это на моей рабочей копии (проверка ствола):

svn merge http://example.org/svn/trunk

безрезультатно, и это также:

svn merge --ignore-ancestry http://example.org/svn/trunk

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

Пожалуйста, помогите!

Ответы [ 2 ]

1 голос
/ 21 августа 2009

Я отметил и удалил текущий ствол, а затем скопировал мою ветку в багажник

Никогда не делай этого. URL http://example.org/svn/trunk теперь ссылается на разные версионные объекты в зависимости от ревизии, о которой вы говорите: старая или новая. Чтобы различать оба, вы можете использовать ревизию колышка , например:

svn merge http://example.org/svn/trunk@X

Если ревизия разметки X является ревизией до удаления вами ствола (например, ревизия, которая удалила ствол минус один), тогда это объединит все подходящие ревизии из старой ствола.

Вы можете использовать опцию --dry-run, чтобы увидеть, что произойдет, фактически ничего не делая. Вы можете использовать -r или -c, чтобы указать конкретные ревизии или диапазоны для слияния, как объяснено при вводе svn help merge.

1 голос
/ 20 августа 2009

Вы можете указать диапазон ревизий для слияния , используя SVN. Таким образом, вы можете указать каждую ревизию, которую вы пропустили, чтобы получать только те изменения, которые были сделаны каждый раз.

например.

svn merge -r 30:31 thhgttg.txt 

После того, как вы обновили все ревизии, я бы отредактировал свойство mergeinfo, чтобы оно содержало полный набор ревизий.

...