Спецификация конфигурации Clearcase с частным филиалом
-
04-07-2019 - |
Вопрос
У меня на работе довольно сложная ветвящаяся структура (по крайней мере, для меня).Это что-то вроде этого:
Main | 1 | 2 | \ 3 \ Ver2 | 1 | \ 2 \ | ProjectA 3 | 1
От основного есть 2 филиала.«Вер2», в которой есть все изменения для следующей версии, и «ПроектА», который является моей работой.
Мой вопрос:Есть ли способ создать спецификацию конфигурации, которая знает, что было объединено, чтобы я получал:
- Все, что не было объединено из ProjectA
- Если ПОСЛЕДНЯЯ версия из ProjectA была объединена с версией Ver2, получите ПОСЛЕДНЮЮ версию из ветки Ver2.
- Если ветки ProjectA нет, получите от Ver2
- Если нет Ver2, получите из MAIN
Например, в приведенном выше случае, если я объединил версию 1 из ProjectA с версией 2 в ветке Ver2, то я хотел бы видеть версию 3 в Ver2.Однако, если я еще не объединил эти файлы, на мой взгляд, мне нужна версия 1 из ProjectA.
Решение
Вы должны помнить, почему вы определяете ветку :
Чтобы изолировать усилия по разработке.
Таким образом, чтобы лучше управлять своей сложной конфигурационной спецификацией, вы должны точно знать, какую роль играют ветка 'main', ветка v2 и ветвь проекта A.
V2 и проект A, например, должны быть там по двум различным причинам.
Если проект А предназначен для разработки текущей версии проекта, должно произойти слияние с веткой V2, чтобы можно было перенастроить некоторые из текущих разработок на ветку V2.
Исходя из этого, вы не должны хотеть видеть " оба " в том же виде: они представляют собой два разных набора файлов, V2 может включать большие рефакторинги с очень разными API.
Однако, если вы настаиваете на такой конфигурации, вы можете использовать возможность перемещения " MERGE_FROM_PA " label: каждый раз, когда вы объединяете некоторые файлы из ветки Project A в V2, вы снова устанавливаете " MERGE_FROM_PA " метка для каждого объединенного файла / каталога, перемещая эту метку из предыдущих версий V2 в их последние.
Спецификация конфигурации может быть:
element * MERGE_FROM_PA
element * .../ProjectA/LATEST
element * .../V2/LATEST
element * /main/LATEST
Но опять же, это не имеет особого смысла.
Вам необходимо определить различные усилия по разработке, которые вы хотите смоделировать, а затем определить согласованный рабочий процесс , позволяющий настроить спецификация фокусируется только на одну из этих сред.
Другие советы
Я не думаю, что ты сможешь сделать это именно так.Однако то, что вы можете получить, является последней версией ProjectA;все в Вер2, что не было изменено в ProjectA;и все в MAIN, что не было изменено в Ver2 или ProjectA.Остальная часть трюка заключается в том, чтобы убедиться, что все необходимое было объединено из Ver2 или MAIN.Для этого вы можете использовать эталонное представление со спецификацией конфигурации для версии 2 (она вам не нужна для MAIN, если версия 2 не обновляется), а затем в представлении ProjectA выполните:
cleartool findmerge . -fta view-tag-for-ver2 -merge
Тем -fta
означает «из тега».Конечно, есть множество дополнительных опций.
Это гарантирует, что ProjectA полностью обновлен по отношению к версии Ver2.
Почему нет? Мне не имеет смысла использовать ветку, если она где-то объединена.
Вот спецификация конфигурации:
element * {version(.../ProjectA/LATEST)&&!hltype(Merge,->)}
element * {version(.../Ver2/LATEST)&&!hltype(Merge,->)}
element * /main/LATEST
что делает этот рабочий процесс непоследовательным, если вы помечаете все это перед сборкой?