Subversion: как объединить только определенные ревизии в транк, если в ветке делается несколько последовательных изменений?

Если вы используете AspectJ, вы можете использовать @Configurable:

@Configurable
public class OurLogger {
  ..
}

См.: Использование AspectJ для зависимостей встраивает объекты домена с помощью Spring

16
задан Eugene Yokota 29 October 2014 в 03:18
поделиться

8 ответов

Проблема - это оба svn

A
<<<<<<< .working
=======
B (unwanted change)
C (important bug fix)
>>>>>>> .merge-right.r341

и TortoiseSVN рассматривает ситуацию как слияние с 2 путями. Я услышал о термине слияние с 3 путями, таким образом, я дал Вне всякого сравнения выстрел. С быстрым набором с TortoiseSVN, Конфликт Редактирования теперь поднимает следующий экран. Это не прекрасно, так как это все еще требует человеческого вмешательства, но по крайней мере я могу сказать, какие изменения происходят от где.

См. снимок экрана.

5
ответ дан 30 November 2019 в 15:41
поделиться

Слияние только изменений 4,7, и 11-15 с svnmerge:

svnmerge.py merge -r4,7,11-15

И с регулярным svn:

svn merge -c4,7 -r10:15 http://.../branches/TRY-XX-Foo
37
ответ дан 30 November 2019 в 15:41
поделиться

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

$ svnadmin create repo
$ svn mkdir -m '' file://`pwd`/repo/trunk

Committed revision 1.
$ svn mkdir -m '' file://`pwd`/repo/branches

Committed revision 2.
$ svn co file://`pwd`/repo/trunk co.trunk
Checked out revision 2.
$ cat > co.trunk/test.txt << EOF
> A
> B
> C
> EOF
$ svn add co.trunk/test.txt
A         co.trunk/test.txt
$ svn commit -m '' co.trunk
Adding         co.trunk/test.txt
Transmitting file data .
Committed revision 3.
$ svn copy -m '' file://`pwd`/repo/trunk file://`pwd`/repo/branches/testbr

Committed revision 4.
$ svn co file://`pwd`/repo/branches/testbr co.testbr
A    co.testbr/test.txt
Checked out revision 4.
$ cat > co.testbr/test.txt << EOF
> A
> A1 unwanted
> B
> C
> EOF
$ svn commit -m '' co.testbr
Sending        co.testbr/test.txt
Transmitting file data .
Committed revision 5.
$ cat > co.testbr/test.txt << EOF
> A
> A1 unwanted
> B
> B1 wanted
> C
> EOF
$ svn commit -m '' co.testbr
Sending        co.testbr/test.txt
Transmitting file data .
Committed revision 6.
$ svn merge -r 5:6 file://`pwd`/repo/branches/testbr co.trunk
--- Merging r6 into 'co.trunk':
U    co.trunk/test.txt
$ cat co.trunk/test.txt
A
B
B1 wanted
C
2
ответ дан 30 November 2019 в 15:41
поделиться

Хорошо для разъяснения вещи о слиянии то, что оно на самом деле имеет 2 шага.

  1. Слияние
  2. Фиксация

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

/Johan

2
ответ дан 30 November 2019 в 15:41
поделиться

В TortoiseSVN необходимо только указать изменения, которые Вы хотите объединить. В отличие от клиента командной строки, где необходимо указать, например,-r4:5 для слияния изменений между r4 и r5, только необходимо указать '5', поскольку число пересмотра для слияния в TortoiseSVN объединяет диалоговое окно. Если Вы не уверены, всегда используйте диалоговое окно журнала от диалогового окна слияния и выберите изменения, которые Вы хотите объединить в том диалоговом окне журнала (затем нажимают "OK", и выбранные изменения будут автоматически установлены в диалоговом окне слияния).

Что касается разрешения Вашего конфликта в TortoiseMerge: Согласно снимку экрана в Вашем вопросе, TortoiseMerge показывает Вам две противоречивых строки (те показанные как'????' в виде снизу). То, что Вы хотите, должно включать изменение 'C', но не 'B'?

  • щелкнуть левой кнопкой по первому'???' строка для выбора его затем щелкните правой кнопкой, выберите 'use block from "mine"' из контекстного меню
  • щелкнуть левой кнопкой по второму'???' строка для выбора его затем щелкните правой кнопкой, выберите 'use block from "theirs"' из контекстного меню
  • Нажмите кнопку сохранения (или Файл-> Сохраняют),
  • Дополнительно нажмите на кнопку "Mark as resolved"
2
ответ дан 30 November 2019 в 15:41
поделиться

Другая вещь, которую Вы могли сделать, будет состоять в том, чтобы вручную отменить плохую фиксацию на ответвлении, которое затем позволило бы Вам объединять ответвление назад в соединительную линию, поскольку Вы обычно будете.

TortoiseSVN

Используя TortoiseSVN Вы открываете представление журнала о файле, выбираете незаконную версию и выбираете "Revert changes from this revision" из меню правой кнопки. Фиксируйте изменения, которые это вносит на Вашей рабочей копии, и затем можно объединиться, ответвление въезжают задним ходом легко.

Командная строка

Чтобы сделать это с клиентом командной строки, Вы выполняете обратное слияние, (Это взято от Прагматического Управления исходным кодом с помощью книги Подверсии), где Вы объединяете изменения между незаконной версией и предыдущей версией в рабочую копию файла. Затем как выше Вы фиксировали бы изменения и можете затем обычно переходить. В Вашем примере Вы сделали бы что-то как:

svn merge -r 4:3 test.txt
1
ответ дан 30 November 2019 в 15:41
поделиться

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

Я делаю большое слияние и, когда Вы обнаружили, инструмент слияния, обеспеченный Черепахой, ужасен. Трехходовой инструмент слияния является насущной необходимостью, если Вы делаете это очень часто. Вне всякого сравнения мой любимый, но существуют другие, которые свободны (Комбинация, KDiff3) и, которые не являются (Araxis).

Вы заметите, что Вне всякого сравнения сделал правильную вещь в конце, даже если это заставляет Вас вручную проверить его правильность!

1
ответ дан 30 November 2019 в 15:41
поделиться

Если Вы не хотите нежелательного изменения, не объединяйте пересмотр 4:5, но просто пересмотр 5. Это означает слияние изменения, фиксировавшего в пересмотре 5.

0
ответ дан 30 November 2019 в 15:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: