Perforce: интеграция нескольких списков изменений, содержащих одни и те же файлы с разными версиями, для ветвления

Всего 10 списков изменений 10006, 10009, ... 10089 относятся к новой функции в ветке 1, я хочу объединить эту функцию в ветку 2.

Как показано ниже, многие списки изменений содержат одни и те же файлы с разными версиями.

список изменений 10006 содержит файл: ClosedLoop.cs (# 5), C (# 2), D.cpp (# 2), K ( # 3)
список изменений 10009 содержит файлы: D.cpp (# 7), E (# 6), H (# 2), M (# 5), Z (# 2)
...
changelist10089 содержит файл: ClosedLoop.cs (# 8), U (# 7), I (# 9)

Я выбираю все 10 списков изменений для слияния, потому что каждый из них содержит несколько уникальных файлов. (например, файлы C и K в 10006, файлы U и I в 10089)

Проблема:
Perforce использует старую версию (ClosedLoop.cs rev. 5) вместо более новой (ClosedLoop.cs rev. 8) для слияния. Perforce использует обе версии ClosedLoop.cs 5 и 8 для слияния, а не только новейшая версия (rev. 8)

Подробности:
Я выполнил шаги по объединению файлов между ветками в видео (https://www.youtube.com/watch?v=6hCPZPl68ng).
В диалоговом окне «Объединить / интегрировать» я выполняю следующие действия:
1. Выберите вкладку «Фильтр»
2. Отметьте «Выбранные списки изменений»
3. Проверьте несколько списков изменений из список. Выбранные списки изменений содержат одинаковые файлы с разными ревизиями. Как показано ниже, список изменений 10006 содержит ClosedLoop.cs в версии 5, а список изменений 10089 содержит тот же файл в версии 8.

введите описание изображения здесь

  1. Нажмите кнопку предварительного просмотра, появится

введите описание изображения здесь

  1. Нажмите кнопку "Объединить"
The problem is that **Perforce uses older revision (revision 5) for merging, not the newer revision (revision 8)** as shown below.
**As shown below, Perforce** **disallow me to select revision 8 for for merging** in the below Resolve dialogue.

Perforce использует для слияния ClosedLoop.cs версии 5 и 8.

введите описание изображения здесь


person YantingChen    schedule 14.11.2014    source источник
comment
Если вы не хотели интегрировать изменения из ClosedLoop # 5, почему вы выбрали список изменений 10006 для интеграции? Вам просто нужно разрешить оба изменения по порядку: сначала объедините изменения из ClosedLoop # 5, затем объедините изменения из ClosedLoop # 8.   -  person Bryan Pendleton    schedule 14.11.2014
comment
Я добавил намерение выбрать оба списка изменений в начале своего поста.   -  person YantingChen    schedule 15.11.2014
comment
Я думаю, вы делаете правильные шаги; возможно, вас просто сбивают с толку сообщения. Вы пробовали использовать инструмент слияния, чтобы увидеть, как сливаются изменения? Он должен включать и ревизию №5, и №8, потому что вы указали, что в обоих списках изменений есть изменения, относящиеся к вашей функции, и их следует объединить с целевой веткой. Я думаю, что все идет правильно, по твоему замыслу.   -  person Bryan Pendleton    schedule 15.11.2014
comment
Помните: после того, как вы пройдете через инструмент слияния и разрешите свои изменения, если вам не понравятся результаты, вы можете вернуть свои открытые файлы и начать заново. Ничто в слиянии не является постоянным, пока вы не отправите его.   -  person Bryan Pendleton    schedule 15.11.2014
comment
Большое спасибо, Брайан.   -  person YantingChen    schedule 18.11.2014
comment
Я проверил, что он включает в себя ревизию №5 и №8 для слияния. Хотя я думаю, что он должен включать только самую новую версию (# 8), но это приемлемо.   -  person YantingChen    schedule 18.11.2014


Ответы (1)


Указывая каждый список изменений индивидуально, вы настраиваете слияния для каждого списка изменений, которые будут включать только определенные изменения в этом списке. Отдельные слияния запланированы для №5 и №8, потому что каждое слияние будет переносить только изменения, сделанные в этой конкретной ревизии, поэтому, если вы пропустите слияние №5 и просто выполните слияние №8, вы не получите изменения, внесенные в № 5 (даже если эти изменения существуют в содержимом № 8, слияние попытается исключить их, если вы указали, что хотите ТОЛЬКО № 8, точно так же, как оно будет исключать № 6 и № 7).

Вместо этого вы, вероятно, захотите сделать именно то, что Perforce настроил для вас - выполнить слияние №5, а затем выполнить слияние №8. Каждое слияние вносит правки в один список изменений в целевой файл, и как только вы сделаете и то, и другое, у вас будут эти два списка изменений, но не промежуточные.

В этой статье базы знаний рассматривается механизм этого типа слияния «вишневого выбора»: http://answers.perforce.com/articles/KB_Article/Cherry-Picking-Integrations

Если вы не хотите выполнять несколько слияний для каждого файла, вы можете сделать все как одну интеграцию, указав диапазон, например:

p4 интегрировать branch1 /...@ 10006,10089 branch2 / ...

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

person Samwise    schedule 21.11.2014
comment
Ваша ссылка не работает. - person Calmarius; 31.07.2018
comment
Если вы пытаетесь найти документацию по Perforce до 2016 года (новые владельцы удалили много вещей со старого веб-сайта), Wayback Machine - полезный ресурс: https://web.archive.org/web/20141007083615/http://answers.perforce.com/articles/KB_Article/Cherry-Picking-Integrations - person Samwise; 01.08.2018