2010-10-12 5 views
5

У меня следующая ситуация с ветвями в репозитории Perforce: есть магистраль «trunk» и две ветви релиза «1.0» и «1.1». Филиал «клиент» с конкретными изменениями клиента был разветвлен с ветвью 1.0. Теперь клиент хочет перейти к версии 1.1. Как я могу объединить ветку 1.1 в ветку клиента? Конкретные изменения клиента должны оставаться «сверху» 1.1.Perforce: Как интегрировать несколько ветвей?

Вот диаграмма для одного инфицированного файла:

1.1      -(1)---(2)---(3) 
         /   \  \ 
        /   \  \ 
trunk 100--(101)-(102)--103---104---105---106---107 
      \ 
      \ 
1.0   ---1-----2--... 
       \ 
        \ 
customer   ---1-----2----*3* 

Текущая версия файла, который я смотрю на это пересмотр 3 на отрасли клиента.

Если я решил интегрировать ветвь «1.1» с целевым «клиентом», я бы ожидал, что общий предок обоих найден (версия 100 на главной линии), и все изменения оттуда, ведущие к концу ветки 1.1, (в скобках).

Вместо этого Perforce предлагает только объединить ревизии с 1 по 3 ветки 1.1, которая не работает, поскольку она пропускает необходимые изменения, которые произошли на главной линии раньше.

Как я могу убедить Perforce сделать это, не просматривая каждый файл вручную и не выбирая варианты для слияния? Может быть, стратегия ветвления непригодна? Что еще мне делать?

ответ

0

Чтобы интеграций легко, я бы создать конкретные ветви trunk_to_custer и 1.1_to_customer, а затем вопрос:

cd customer-workspace 
p4 integ -b trunk_to_customer @change-number-at-which-1.1-was-branched 
p4 resolve 

возможно в период между представить здесь, а затем

p4 integ -b 1.1_to_customer 
p4 resolve 
p4 submit 
+0

Если я пытаюсь «p4 integ -b 1.1_to_customer», я получаю «не может интегрироваться из ... без -i-флага» для каждого файла, который имеет изменения в ветке клиента. Если я добавлю «-i», слияние завершится неудачно, потому что только ревизии на ветке 1.1 интегрированы, а не те, которые находятся на магистрали. – hfs

+0

Perforce не знает, что изменения 101 и изменения 102 необходимы для того, что произошло на ветке 1.1. Поэтому сначала вам необходимо интегрировать ствол до 102 в клиент, прежде чем интегрировать 1.1. –

+0

Да, это то, что я сделал в конце: у меня было две метки на главной линии, которые обозначали базы ветвей 1.0 и 1.1. Я сначала объединил «туловище» между этими ярлыками, разрешил все, а затем слил 1.1 поверх этого и снова разрешил.Это сработало. – hfs

2

При попытке чтобы интегрировать ревизию 3 из вашей ветки 1.1, Perforce только скажет вам, что она интегрирует изменения в эту конкретную ветвь, но в редакции 1 уже содержатся исправления ствол 101 и 102. При объединении Perforce будет идентифицировать версию 100 транков в качестве общего предка для confl ict.

Было моим опытом, что интеграция, которую вы пытаетесь сделать, должна просто работать. Вы видите изменения, отсутствующие в интегрированном источнике (что не может быть объяснено неправильным разрешением конфликтов), или вы просто смотрите на вывод p4 interchanges?

2

Я настоятельно рекомендую попытаться объединить изменения клиента в багажник. Он будет продолжать оставаться кошмаром для обслуживания, когда через несколько месяцев после того, как клиент захочет обновить до 2.0 + свои пользовательские изменения.

Если вы не хотите, чтобы изменения клиента отражались в вашем основном проекте, найдите время, чтобы перестроить код, чтобы вы могли выявить желаемое поведение клиента с помощью флага сборки или создать файл конфигурации. У обеих конфигураций сборки, работающих в CI, убедитесь, что будущие изменения не нарушают работу клиента.

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