2013-08-26 1 views
4

Я получаю сообщение об ошибке выше, когда я использую второй вариант слияния SVN, то есть «Реинтегрируйте ветвь/автоматическое слияние». Я понимаю, почему я получаю ошибку то это потому, что при создании филиала я просто перетащить проект в новую ветвь от ствола (с помощью Repo-браузер) вместо одного из следующих методов:SVN: должно быть связано с базой данных

  1. использования Копировать в в Repo-Browser
  2. Используйте Branch параметр/Tag (правой кнопкой мыши по проекту в проводнике Windows и выберите TortoiseSVN/Ответвление/Метка)

у меня есть три вопроса:

  1. Почему проекты должны быть связаны между собой? Этот вопрос предполагает, что SVN просто сравнивает файлы, если выбрана эта опция: What are the differences between merging a range of revisions vs. reintegrate in SVN?.
  2. Есть ли оба варианта выше, чтобы связать проект с базой?
  3. Простая перетаскивание проекта от Trunk to Branch делает проект не связанным с сетью?

ответ

13

Почему проекты должны быть связаны между собой? Этот вопрос предполагает, что SVN просто выполняет сравнение файлов, если выбрана эта опция: SVN Объединяет диапазон изменений и реинтеграции.

Объединения не просто копировать изменения файлов из одной отрасли в другую, это сравнение последних общего предка с двумя файлов в слиянии. Это три способа слияние.

Допустим, у вас есть файл по стволу:

Line #1 
Line #2 
Line #3 
Line #4 

Вы делаете ветвь этого файла.

На ветке, вы измените строку # 4, как:

Line #1 
Line #2 
Line #3 
Line #4 FOO FOO FOO 

На стволе, вы меняете Line # 3, как

Line #1 
Line #2 
Line #3 BAR BAR BAR 
Line #4 

Subversion сравнивает последний общий предок (версия файла перед любые изменения) с файловыми версиями, которые вы объединяете. Если я соединяю ствол с веткой, Subversion видит, что я изменил строку № 3 на соединительной линии, но не на строку №4. Поэтому изменение линии №3 необходимо перевести, но разница в строке №4 является результатом изменения на ветке, и я не должен копировать по линии №4 из магистрали

Объединенный файл выглядит следующим образом:

Line #1 
Line #2 
Line #3 BAR BAR BAR 
Line #4 FOO FOO FOO 

Subversion также принимает во внимание ранее объединенные изменения и изменения, которые вы хотите пропустить. Это на самом деле довольно хорошее средство слияния, если вы не начинаете переименовывать файлы и не перемещаете их по оптовым ценам. (Предположим, что это исправлено в Subversion 1.9).

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

Вы можете попробовать параметр --ignore-ancestry. Это заставляет Subversion рассматривать слияние как diff.

Есть ли оба варианта выше, чтобы связать проект с базой?

Ни один вариант (я беру его, вы думаете о --reintegrate против этого варианта) делают проект связанным с базой. Это происходит от создания ветки через svn cp. --reintegrate против реинтеграции не зависит от способа слияния. При слиянии с вашего основного потока (обычно ствол) к вашему разветвленного потока, вы объединяете изменения, которые произошли на вашем основного потока на разветвленного поток. Это создает новые изменения. Когда вы сливаетесь назад, Subversion видит новые версии и хочет объединить эти изменения обратно в ваш базовый поток .. Параметр reintegrate удаляет это из-за происходящего.

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

Простая перетаскивание проекта из Trunk в Branch делает проект не связанным с природой?

Зависит от клиента Subversion. Некоторые клиенты Subversion GUI понимают перетаскивание как svn cp, а не простое копирование файлов в другой каталог. Тем не менее, TortoiseSVN работает через проводник Windows, поэтому перетаскивание по умолчанию является копией файловой системы. Существует опция, когда вы нажимаете правой кнопкой мыши на перетаскивание, чтобы сделать svn cp вместо копии файловой системы Windows.

+0

Спасибо за всесторонний ответ. +1. Единственный запрос, который у меня есть, заключается в том, что копия, похоже, делает проекты связанными с предками? – w0051977

+0

Да, если вы говорите о *** 'svn cp' ***. Это позволяет Subversion знать, как разные ветви связаны друг с другом. Копирование с версией ОС для копирования (т. Е. Перетаскивание и копирование Windows) не предупреждает Subversion о связи ветвей. Вместо этого Subversion рассматривает файлы в этой ветке как совершенно другой набор файлов. Другие системы контроля версий не страдают от той же участи, потому что ветви являются внутренними для файлов. Если вы используете TortoiseSVN, щелкните правой кнопкой мыши при перетаскивании и выберите «SVN Copy versioned items (s) здесь». –

+0

Спасибо. Я предполагаю, что щелчок правой кнопкой мыши на рабочей копии в проводнике Windows и выбор черепахи svn/branch эквивалентен выбору «копировать в» в браузере репо? – w0051977

Смежные вопросы