Найти все незакрепленные файлы / элементы в ClearCase - PullRequest
3 голосов
/ 18 сентября 2011

Мы используем ClearCase там, где я работаю, и я пытаюсь выяснить, как найти файлы, которые были изменены, но не объединены.У нас есть основная ветвь на самом верхнем уровне в ClearCase, и именно здесь объединены окончательные изменения исходного кода и из чего мы строим наши формальные релизы.Затем у нас есть ветка интеграции под главным, где решаются вопросы интеграции.Когда у нас все работает и тестируется в ветке интеграции, мы объединяем ветку интеграции с основной.Для реализации отдельных функций и исправления ошибок мы создаем новую ветку (обычно называемую в честь действия, функции или исправления) вне ветви интеграции и решаем проблему.Когда мы закончим с этим, мы объединяем это изменение с веткой интеграции.

Мне было интересно, знает ли кто-нибудь команду или способ увидеть, какие файлы изменены в ветках функций / исправлений ошибок, но были ли онине объединены обратно в ветку интеграции.Я искал вокруг, но я не могу найти способ сделать это.Я хотел бы иметь возможность запустить команду, чтобы она показала мне все файлы, которые были изменены во всех дочерних ветвях, но не объединены.Спасибо.

Ответы [ 2 ]

3 голосов
/ 19 сентября 2011

Если вам известны ветви источника и назначения (тема подробно описана в Jonathan * answer , за который я проголосовал), то не забудьте примитив запроса слияние :

merge (from-location , to-location)

Во всех случаях TRUE, если элемент, к которому принадлежит объект, имеет гиперссылку слияния (имя по умолчанию): Merge) соединение from-location и to-location.
Можно указать одно или оба местоположения с помощью пути к ветви или селектора версии.
При указании ветви создается TRUE, если в гиперссылке слияния есть какие-либоверсия для этой ветви.
Путь к ветви должен быть полным (например, /main/rel2_bugfix, а не rel2_bugfix).

Этот поток иллюстрирует этот запрос в действии:

Как можно найти все элементы в конкретной ветви, которыезарегистрирован и не объединен?

cleartool find \\view\administration\ProjectVOB \
   -branch "brtype(HNH-372452) && \
   !merge(...\HNH-372452\LATEST,...\main-372452\LATEST)" -print

\\view\administration\ProjectVOB\Com-API\Dll\COMFrontendDll\Mmi.cpp@@\main\HNH-372452
\\view\administration\ProjectVOB\geometry\geochain\geocutterloc.cpp@@\main\HNH-372452

Эта "гиперссылка слияния" - это красная стрелка, которую вы видите в дереве версий:
(см. статью " Управление версиями и параллельность"разработка требований")

red arrow in version tree

3 голосов
/ 18 сентября 2011

Обычно вы используете ct findmerge, чтобы найти файлы для объединения из одной ветви или просмотра в текущем представлении (предполагая, что ct является псевдонимом для cleartool).

Я думаю, вам придетсяопределите все интересующие вас филиалы и выполните отдельную операцию ct findmerge для каждого филиала - для каждого филиала назначения.Это сложно.Вы также хотели бы иметь возможность удалить много веток, которые, как известно, полностью объединены.Вы можете аннотировать ветку, чтобы указать, что она полностью объединена.

Итак, я не думаю, что есть простая, единственная команда для выполнения этой работы.


Вам необходиморешить, какие ветви являются целями, которые вас беспокоят.Это будут ваши интеграционные ветви.Предположительно, у вас есть довольно небольшой список из них.

Для каждой из этих целевых ветвей вам необходимо решить, какие рабочие ветви относятся к этой ветви интеграции.Это сложная часть;нет простого способа определить, относится ли конкретное исправление ошибки или ветвь функции к этой ветке интеграции, используя информацию в VOB;на самом деле он известен только пользователям.

Затем вам понадобится скрипт, который выполняет (в общих чертах):

for int_branch in $(list_relevant_integration_branches)
do
    ...create view with tag $tag for $int_branch...
    ct setcs -f $(cspec_for_integration_branch $int_branch) $tag
    ct setview -exec "find_outstanding_merges_for_integration_branch $int_branch" $tag
done

, где find_outstanding_merges_for_integration_branch выглядит примерно так:

vob_list=$(list_relevant_vobs)
for mrg_branch in $(list_relevant_merge_branches $int_branch)
do
    echo
    echo "Merges from $mrg_branch to $int_branch"
    ct findmerge $vob_list -fversion .../$mrg_branch/LATEST -print
done

Обратите внимание, что в этой команде предполагается, что (a) текущее представление подходит для цели, и (b) имя ветви интеграции передается в качестве аргумента.

Вы можете придумать и решить, как обрабатыватьавтоматическое или графическое слияние вместо -print.Сложной частью по-прежнему остаются неписанные команды, такие как list_relevant_integration_branches и list_relevant_vobs.Они могут быть простыми:

# list_relevant_integration_branches
cat <<EOF
integration_branch_version_3_0
integration_branch_version_3_1
integration_branch_version_4_0
EOF

# list_relevant_vobs
cat <<EOF
/vobs/mainproject
/vobs/altproject
/vobs/universal
EOF

Или они могут быть значительно более сложными.(Если у вас есть только один VOB, то ваша жизнь намного проще; системы, с которыми мы работаем, имеют 20 с лишним VOB, видимых в cspec.)

Другой неписаный скрипт - list_relevant_merge_branches.Я не знаю, есть ли простой способ написать это.Если вы определяете и применяете соответствующие типы атрибутов (ct mkattype, ct mkattr) при создании ветвей разработки (возможно, тип атрибута «целевая ветвь интеграции», тип перечисления), вы можете использовать это для руководства.Это оставляет вас с проблемой модернизации;как получить правильный атрибут для каждой существующей рабочей ветви.Вам также нужен отдельный атрибут, чтобы идентифицировать ветви, которые больше не нуждаются в проверке слиянием, если только вы не решите, что отсутствие атрибута «целевой ветви интеграции» означает «больше не нужно проверять».Это уменьшает проблему модернизации до добавления целевой ветви интеграции к тем ветвям, которые все еще нуждаются в объединении;по умолчанию все существующие ветви будут считаться полностью объединенными.

...