Найти все незакрепленные файлы / элементы в ClearCase

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

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

2 ответа

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

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

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

красная стрелка в дереве версий

Обычно вы используете 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

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

Вы можете придумать и решить, как обрабатывать автоматические или графические слияния вместо -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, ваша жизнь намного проще; в системах, с которыми мы работаем, в cspec есть 20 с лишним VOB.)

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

Другие вопросы по тегам