Если вы используете AspectJ, вы можете использовать @Configurable
:
@Configurable
public class OurLogger {
..
}
См.: Использование AspectJ для зависимостей встраивает объекты домена с помощью Spring
Проблема - это оба svn
A
<<<<<<< .working
=======
B (unwanted change)
C (important bug fix)
>>>>>>> .merge-right.r341
и TortoiseSVN рассматривает ситуацию как слияние с 2 путями. Я услышал о термине слияние с 3 путями, таким образом, я дал Вне всякого сравнения выстрел. С быстрым набором с TortoiseSVN, Конфликт Редактирования теперь поднимает следующий экран. Это не прекрасно, так как это все еще требует человеческого вмешательства, но по крайней мере я могу сказать, какие изменения происходят от где.
Слияние только изменений 4,7, и 11-15 с svnmerge:
svnmerge.py merge -r4,7,11-15
И с регулярным svn:
svn merge -c4,7 -r10:15 http://.../branches/TRY-XX-Foo
Я полагаю, что Вы включаете изменения, которые Вы хотите правильно, но алгоритму слияния не удается найти, что место вставляет требуемое изменение и так включая строку выше его также. Вот те же шаги, но с другим набором изменений, и я полагаю, что он работает, как Вы ожидали первоначально:
$ 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 шага.
Таким образом, это означает, что после того, как Ваше слияние сделано, можно сделать ручную разность против головы и другого ответвления, чтобы удостовериться, что слияние было корректно. И если что-то было неправильно с ним, как в Вашем случае, можно вручную зафиксировать его перед фиксацией.
/Johan
В TortoiseSVN необходимо только указать изменения, которые Вы хотите объединить. В отличие от клиента командной строки, где необходимо указать, например,-r4:5 для слияния изменений между r4 и r5, только необходимо указать '5', поскольку число пересмотра для слияния в TortoiseSVN объединяет диалоговое окно. Если Вы не уверены, всегда используйте диалоговое окно журнала от диалогового окна слияния и выберите изменения, которые Вы хотите объединить в том диалоговом окне журнала (затем нажимают "OK", и выбранные изменения будут автоматически установлены в диалоговом окне слияния).
Что касается разрешения Вашего конфликта в TortoiseMerge: Согласно снимку экрана в Вашем вопросе, TortoiseMerge показывает Вам две противоречивых строки (те показанные как'????' в виде снизу). То, что Вы хотите, должно включать изменение 'C', но не 'B'?
Другая вещь, которую Вы могли сделать, будет состоять в том, чтобы вручную отменить плохую фиксацию на ответвлении, которое затем позволило бы Вам объединять ответвление назад в соединительную линию, поскольку Вы обычно будете.
TortoiseSVN
Используя TortoiseSVN Вы открываете представление журнала о файле, выбираете незаконную версию и выбираете "Revert changes from this revision" из меню правой кнопки. Фиксируйте изменения, которые это вносит на Вашей рабочей копии, и затем можно объединиться, ответвление въезжают задним ходом легко.
Командная строка
Чтобы сделать это с клиентом командной строки, Вы выполняете обратное слияние, (Это взято от Прагматического Управления исходным кодом с помощью книги Подверсии), где Вы объединяете изменения между незаконной версией и предыдущей версией в рабочую копию файла. Затем как выше Вы фиксировали бы изменения и можете затем обычно переходить. В Вашем примере Вы сделали бы что-то как:
svn merge -r 4:3 test.txt
Как указано другими пользователями (я не припишу себе замечающий его, потому что я не сделал), это может быть тривиальная природа этого слияния (т.е. отсутствие контекста вокруг изменения), который путает инструменты.
Я делаю большое слияние и, когда Вы обнаружили, инструмент слияния, обеспеченный Черепахой, ужасен. Трехходовой инструмент слияния является насущной необходимостью, если Вы делаете это очень часто. Вне всякого сравнения мой любимый, но существуют другие, которые свободны (Комбинация, KDiff3) и, которые не являются (Araxis).
Вы заметите, что Вне всякого сравнения сделал правильную вещь в конце, даже если это заставляет Вас вручную проверить его правильность!
Если Вы не хотите нежелательного изменения, не объединяйте пересмотр 4:5, но просто пересмотр 5. Это означает слияние изменения, фиксировавшего в пересмотре 5.