ClearCase конфликт-слияние-при-перебазировании загадка, почему иногда требуется ручное слияние при выполнении перебазирования для файла, в котором НЕТ локальных изменений?

Вот довольно сложный вопрос для настоящих экспертов ClearCase:

Я часто выполняю перебазирование в представлении моментального снимка ClearCase, которое имеет очень ограниченное количество небольших изменений в нескольких файлах (например, file1.c, file2.c, file3.c).

Я делаю это следующим образом в командной строке UNIX:

cleartool rebase -recommended -complete

Иногда, когда эта команда выполняется, неожиданно и без объяснения причин (пока) мне предлагается ввести вручную, чтобы разрешить некоторые конфликты «слияния». Но они не имеют для меня никакого смысла, поскольку находятся в файлах, к которым Я НИКОГДА НЕ ПРИКАСАЛАСЬ - и которые ТОЛЬКО ОДИН ДРУГОЙ РАЗРАБОТЧИК КОГДА-ЛИБО ПРИКАСАЕТСЯ.

Подсказки «слияния», которые я вижу, когда этот сценарий происходит во время перебазирования, обычно выглядят так:

"Do you want INSERTION from file x? [yes/no]" 
or 
"Do you want DELETION from file y? [yes/no]" 
or 
"Do you want CHANGES from file z? [yes/no]". 
Etc.

Я понятия не имею, почему происходят эти «конфликты». Кроме того, действительно сложно (увидеть невозможное) принимать правильные решения, потому что детали показаны в очень узком количестве столбцов, и вряд ли есть какой-либо способ правильно угадать. Использование графического слияния здесь не вариант, потому что оно предназначено для сценария автоматизации, который в идеале никогда не должен запрашивать ввод пользователя.

Что я знаю об этом сценарии:

У нас есть команда из 6 разработчиков. Пятеро из нас обычно работают с одним и тем же ограниченным количеством файлов ... скажем, file1.c, file2.c, file.3.c

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

В тех случаях, когда возникали «конфликты слияния» при перебазировании, он всегда находился в совершенно ДРУГИМ ФАЙЛЕ - к которому ВСЕГДА ТРАГАН ТОЛЬКО ОДИН другой разработчик в команде (это модуль, которым ОН владеет, НИКОГДА НИКОГДА КАСАЕТСЯ ФАЙЛА, НО НЕГО). Назовем его разработчиком №6.

Когда случается этот странный «конфликт слияния» при перебазировании, я обычно продолжительное время работал в собственном дочернем потоке разработки (всегда с представлением моментального снимка), и я сделал пару перебазов (как минимум 3), чтобы другие изменения, ВСЕ сделанные другими разработчиками (в file1.c, file2.c и file3.c) и которые мне понадобились для завершения моей работы.

Но другой разработчик (№6), ТОЛЬКО ОДИН, работающий над banana.c, внес изменения в этот файл по крайней мере в двух из трех действий по перебазированию, которые были созданы в представлении моментальных снимков поток развития моего ребенка.

Опять же, повторяю, я НИКОГДА не трогал banana.c, и никто из 5 других разработчиков никогда этого не делал, за исключением парня (№6), который владеет модулем banana.c.

И там это произошло - ClearCase попросил меня ввести вручную, чтобы разрешить конфликт «слияния» с banana.c при выполнении «cleartool rebase -recommended -complete».

  1. Как это может быть возможным???

  2. Как может файл требовать «слияния» при выполнении перебазирования, если ТОЛЬКО один разработчик вносит в него изменения?

  3. Это как если бы ClearCase запутался между разными версиями banana.c по крайней мере в двух из трех действий перебазирования, автоматически созданных в моем потоке (которые оба изменяли banana.c), и предлагал мне разрешить «конфликт слияния» (хотя я никогда не коснулся banana.c, и только один разработчик (№6) когда-либо изменил этот файл).

. . .


ОБНОВЛЕНИЕ: 31 АВГУСТА 2015 ГОДА

Вот протокол возникновения проблемы 28 августа 2015 г.

    Needs Merge "/view/MYDYNAMICVIEW/vobs/DIRLEVEL1/DIRLEVEL2/SOMEFILE.cpp" to /main/MAIN_INT_STREAM/SUB_STREAM/CHECKEDOUT from /main/MAIN_INT_STREAM/SUB_STREAM/MY_DEV_STREAM/37 base /main/
MAIN_INT_STREAM/SUB_STREAM/150
    ********************************
    <<< file 1: /view/MYDYNAMICVIEW/vobs/DIRLEVEL1/DIRLEVEL2/SOMEFILE.cpp@@/main/MYDYNAMICVIEW/SUB_STREAM/150
    >>> file 2: /view/MYDYNAMICVIEW/vobs/DIRLEVEL1/DIRLEVEL2/SOMEFILE.cpp@@/main/MYDYNAMICVIEW/SUB_STREAM/MY_DEV_STREAM/37
    >>> file 3: /view/MYDYNAMICVIEW/vobs/DIRLEVEL1/DIRLEVEL2/SOMEFILE.cpp
    ********************************
    ...CUT FOR BREVITY...
    *** Automatic: Applying DELETION from file 3 [deleting base line 123]
    ...CUT FOR BREVITY...
    *** Automatic: Applying INSERT from file 3 [lines 123-124]
    ...CUT FOR BREVITY...
    *** Automatic: Applying CHANGE from file 3 [lines 1329-1335]
    ...CUT FOR BREVITY...
    *** No Automatic Decision Possible
    merge: Warning: *** Aborting...
    Missing charsets in String to FontSet conversion
    Missing charsets in String to FontSet conversion
    Missing charsets in String to FontSet conversion
    Cannot convert string "-misc-kochi mincho-medium-r-normal--0-*-*-*-*-*-*-*" to type FontSet
    ...GMERGE POPPED HERE...
    Moved contributor "/view/MYDYNAMICVIEW/vobs/DIRLEVEL1/DIRLEVEL2/SOMEFILE.cpp" to "/view/MYDYNAMICVIEW/vobs/DIRLEVEL1/DIRLEVEL2/SOMEFILE.cpp.contrib".
    Output of merge is in "/view/MYDYNAMICVIEW/vobs/DIRLEVEL1/DIRLEVEL2/SOMEFILE.cpp".
    Recorded merge of "/view/MYDYNAMICVIEW/vobs/DIRLEVEL1/DIRLEVEL2/SOMEFILE.cpp".

Я никогда не касался SOMEFILE.cpp - только ОДИН другой разработчик когда-либо менял - почему это требует слияния?
На данный момент у меня сложилось чистое впечатление, что автоматическое слияние ClearCase выполняет плохая работа.
Может быть, было бы неплохо подумать об использовании параметров "-qall" или "-qntrivial", чтобы отключить автоматическое слияние ВСЕХ / БОЛЬШИНСТВ - и выполнить слияние ВСЕ / БОЛЬШИНСТВО вручную? (или с помощью внешнего инструмента?)


person user972301    schedule 07.03.2015    source источник
comment
Я видел это, которое, кажется, описывает несколько похожий сценарий: dbaspot.com/configuration-management/ ---- мы обычно заставляем всех вручную создавать / рекомендовать базовый уровень после каждой доставки ---- но это зависит от людей, которые не забывают делать ручные шаги каждый раз - интересно, не связано ли то, что я столкнулся с cleartool rebase -recommended -complete, с тем, что другой разработчик №6 забыл создать / рекомендовать базовый уровень?   -  person user972301    schedule 07.03.2015


Ответы (1)


1 и 2 Как такое возможно ???

Это сообщение «Вы хотите, чтобы ИЗМЕНЕНИЕ было внесено в файл 2? [Да] нет» появляется только тогда, когда 2 участника отличаются от основного участника.
В этом случае a _ 1_ (не с -graph, поскольку у вас нет сервера X-Window) может помочь увидеть задействованную версию и попытаться создать _ 3_, чтобы увидеть разницу (по сравнению с базовым участником)

https://stackoverflow.com/a/9534815/6309

3 /: это один из примеров, когда, если возможно, совместная работа над одним потоком / веткой (вместо работы каждого разработчика в одном собственном потоке) было бы лучше.


Что касается обновления от августа 2015 года, основное сообщение об ошибке:

Missing charsets in String to FontSet conversion

См. Техническое примечание «Использование графического интерфейса пользователя приводит к появлению сообщения« Отсутствуют кодировки в преобразовании String в FontSet ». предупреждение "

Возможные причины включают:

  • Неправильная установка переменной локали. Например, это может быть UTF-8.
  • Представляет интерес файл Linux / palette, который определяет фактические шрифты, используемые в среде. Этот файл читается для определения шрифтов, которые могут отображаться в графическом интерфейсе ClearCase.
  • Файл палитры не содержит правильный набор шрифтов.

Эта проблема была идентифицирована как дефект продукта и зарегистрирована под APAR PK30799.

person VonC    schedule 07.03.2015
comment
Спасибо за прекрасные объяснения, VonC, это очень ценится. Однако обратите внимание, что приведенные мной подсказки могут быть не совсем точными - я просто упоминаю их по памяти, так как я не записал журнал сообщений, которые я получил, когда это произошло. Так что подсказки могут быть не совсем тем, что произошло. Но я знаю, что файл был изменен только разработчиком №6. Я помню базовые показатели, которые привели к тому, что это произошло на этой неделе, поэтому у меня может быть шанс воспроизвести ту же проблему, используя поток, созданный с той же старой базовой линией, и перенастроить его. Я попробую сегодня и сделаю запись в журнале. - person user972301; 07.03.2015
comment
@ user972301, я все равно считаю хорошей практикой работать с одним и тем же потоком. - person VonC; 07.03.2015
comment
К сожалению, воспроизвести не удалось. Пытался создать поток со старой базовой линией, несколько раз перебазировать постепенно, приближаясь к текущей дате, но слияние так и не сработало. Мне придется подождать, пока это не повторится снова. Что касается работы над подобным потоком, похоже, что здесь люди привыкли разделять потоки, поэтому, к сожалению, я не могу это контролировать ... Пока что спасибо за помощь. Когда это снова появится, я сделаю запись в журнале. - person user972301; 08.03.2015
comment
Сегодня мне очень повезло, и я воспроизвел ту же самую проблему слияния, в то время как мне пришлось сделать еще одну перебазировку в представлении моего дочернего потока, которое не выполнялось более месяца. Конфликтующие файлы НЕ были изменены мной, но они вызывают конфликты слияния. Я серьезно ожидаю, что по крайней мере два действия по перебазированию, которые в настоящее время находятся в представлении, каким-то образом конфликтуют с новым кодом рекомендуемой базовой линии, который может изменять те же файлы, которые я сам не касался. - person user972301; 10.03.2015
comment
Приведенный выше ответ по-прежнему не объясняет, почему два участника, которые работают на удаленных машинах, могут по-прежнему вызывать слияние локально на моей собственной машине, когда они изменили файлы, которых у меня нет, и когда мое представление полностью чистое (без локальные изменения). Я подозреваю, что каким-то образом накопленные множественные действия по перебазированию конфликтуют с чьими-то изменениями, и мне кажется смешным, что мне, возможно, придется объединить чужой код, если он не может локально конфликтовать с моим. - person user972301; 11.03.2015
comment
@ user972301 ответ выше - всего лишь указатель на то, где искать и какие различия делать между версиями, чтобы получить более точное понимание причин конфликта. - person VonC; 11.03.2015
comment
Хорошо - достаточно честно - но когда именно я должен попробовать cleartool lsvtree и cleartool diff? (Если загадочный конфликт слияния происходит во время перебазирования, выполненного с помощью автоматического сценария с cleartool rebase -recommended -complete [-gmerge], нет подсказки для запуска этих команд. Могу ли я просто открыть другой консольный терминал unix и сделать это параллельно в том же представлении моментального снимка при конфликте слияния случится? (я полагаю, да ...)). - person user972301; 14.03.2015
comment
@ user972301 Вот почему я не использую -complete сразу: это означает, что я могу различать после первого шага слияния, что может закончиться конфликтами. Фактически, в этом случае я перезапускаю слияние через графический интерфейс, чтобы сделать различия такими же. - person VonC; 14.03.2015
comment
К сожалению, у меня не было достаточно времени, чтобы перепроверить это, так как я должен был завершить работу, которая должна была быть. Однако, обладая знаниями, которые я получил до сих пор по этому поводу, я вполне уверен, что смогу воспроизвести его, если я просто создаю дочерний поток разработки и связанный с ним вид снимка и никогда не изменю в нем какие-либо файлы, но просто продолжайте перебазировать каждый день или каждую неделю какое-то время. В конце концов, действия по перебазированию будут накапливаться в этом потоке, и изменения, которые они содержат, исходящие от ДРУГИХ разработчиков, начнут конфликтовать друг с другом и вызовут конфликты слияния при перебазировании. - person user972301; 18.03.2015
comment
Прошло несколько месяцев, прежде чем это случилось снова, но теперь мне удалось обнаружить, что эта проблема возникает снова. Я сделал журнал. Скорее всего, мне понадобится место, чтобы вставить сюда. Но в основном я был свидетелем двух сбоев автоматического слияния, из-за которых графическое слияние появлялось всплывающе. СНОВА ОБРАТИТЕ ВНИМАНИЕ: файлы, которые меня просят объединить, НЕ были изменены НИКОМ, кроме разработчика №6. НИКОГДА В КОМАНДЕ ЭТОГО НЕ ТРАГОВАЛОСЬ - ТАК ПОЧЕМУ НЕОБХОДИМО ОБЪЕДИНЕНИЕ? - person user972301; 31.08.2015
comment
Stackoverflow ошибочно жалуется на некоторую проблему форматирования в моем обновленном сообщении, и я не могу опубликовать сообщение прямо сейчас, и мне нужно пойти на собрание - повторю попытку, чтобы обновить позже. - person user972301; 31.08.2015
comment
Хорошо - удалось исправить проблемы с идентификацией - потребовалось много правок, но я обновил вопрос выше, добавив последние сведения, которые у меня есть. - person user972301; 31.08.2015
comment
Спасибо - очень признателен. Я быстро бегло просмотрела, и похоже, что вы что-то поняли. Подробно расскажу, как только позволит время на этой неделе. Я рад, что сейчас начал собирать эти журналы cleartool! :) - person user972301; 31.08.2015
comment
Что ж ... после небольшого прочтения я склонен не соглашаться с проблемой кодировки (пока) - внимательно присмотревшись к журналам, первая произошедшая ошибка обнаруживается ДО того, как появится графический интерфейс, в то время как автоматическое слияние происходит в тексте mode: *** No Automatic Decision Possible merge: Warning: *** Aborting... - поэтому я не уверен, что текущее руководство по устранению проблем со шрифтами в графическом интерфейсе является точным. К чему относится это сообщение "Невозможно автоматическое решение"? Может быть, некоторые символы UTF-8 в исходных файлах препятствуют слиянию? Дайте мне знать, что вы думаете. - person user972301; 31.08.2015
comment
@ user972301 Какую версию ClearCase вы используете? Какая ОС стоит на сервере? по клиентам? - person VonC; 31.08.2015
comment
Выполнение cleartool -ver дает мне большой объем вывода, который слишком велик для вставки сюда, но ВСЕ показанные номера версий начинаются с 8.0.0.X. - person user972301; 31.08.2015
comment
На стороне клиента, где я это вижу, у меня Ubuntu 12.04 LTS Linux ca628928 3.2.0-51-generic #77-Ubuntu SMP Wed Jul 24 20:18:19 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux - как я могу узнать о серверной ОС? - person user972301; 31.08.2015
comment
@ user972301, ваш администратор ClearCase будет знать об этом (или в журналах ClearCase это может быть упомянуто). На данный момент у меня больше нет элементов. Я посмотрю, что найду, завтра. - person VonC; 31.08.2015
comment
Я стараюсь по возможности избегать прослушивания администратора CC, поэтому я попытался получить информацию сам, используя cleartool hostinfo -long. Я нашел свой сервер реестра и снова запросил с той же командой. Согласно выводам, я получаю, что сервер работает под управлением CC 8.0.1.4 на HP-UX B.11.31 U, на ia64. - person user972301; 01.09.2015
comment
Я все еще пытаюсь понять эту проблему. Теперь, принимая во внимание, что отображаемые сообщения *** Automatic: Applying CHANGE from file 3 [lines 1329-1335] ...CUT FOR BREVITY... *** No Automatic Decision Possible merge: Warning: *** Aborting..., я думаю, вам может потребоваться отредактировать свой ответ, поскольку, похоже, мы идем по другому пути (проблема, похоже, связана с некоторым неудачным автоматическим слиянием) ... Я хотел бы понять, почему, а также, возможно, какие шаги сделал cleartool rebase ... в отношении слияния, чтобы посмотреть, смогу ли я сосредоточиться на чем-то. - person user972301; 03.09.2015
comment
Я знаю, что файл, о котором идет речь, несколько раз редактировал ТОЛЬКО ОДИН ЛИЦО, и в его представлении было несколько действий по перебазированию, так как его попросили не доставлять какое-то время. Когда он, наконец, доставил свои материалы, этот единственный файл, отредактированный им самим, заставил ClearCase предложить нам слияние, в то время как мы случайно сделали переустановки на нашей стороне после его доставки. Я думаю, что когда это обнаружилось у меня, в моем представлении моментального снимка скопилось несколько действий по перебазированию. Почему-то я думаю, что у меня могут быть более старые версии файла по крайней мере в одном из этих накопленных действий по перебазированию. Может ли это быть причиной? - person user972301; 03.09.2015
comment
@ user972301 да, может: любое одновременное изменение в обеих ветвях сливается (здесь перебазирование UCM из родительского потока в дочерний) может вызвать конфликт. - person VonC; 03.09.2015
comment
Оххх ... Хорошо, давайте посмотрим, правильно ли я понял: если ТО ЖЕ УДАЛЕННОЕ ЛИЦО изменяет файл в своем дочернем потоке разработки, затем доставляет свои изменения в общий родительский поток интеграции, и во время этого время, когда я работаю в дочернем потоке разработки в том же родительском потоке интеграции, и я перебазирую, уже имея одну (или несколько) более старых версий того же файла, в предыдущей операции перебазирования в моем собственном потоке разработки (все еще только из < i> ЖЕ ЛИЦО), чтобы принять его последние изменения, это вызовет конфликт в моем потоке разработки ребенка? (похоже, что это то, что с нами происходит постоянно). - person user972301; 04.09.2015
comment
@ user972301 да, это не что-то вроде одного и того же человека, а больше о одновременных модификациях, которые вызовут конфликты. - person VonC; 04.09.2015
comment
Ага ... Я слышал о проблеме злого двойника с ClearCase - связано ли это с этим в какой-либо форме? Во всяком случае, похоже, что нет никакого способа обойти это ... :( - person user972301; 05.09.2015
comment
@ user972301, только если один и тот же элемент добавлен в систему управления версиями дважды в разных ветвях: stackoverflow.com/q/13283401/6309 , stackoverflow.com/q/11705061/6309, stackoverflow.com/a/27635705/6309 - person VonC; 05.09.2015
comment
Хорошо, это не проблема злых близнецов, потому что файлы никогда не добавляются / не удаляются из разных потоков, они только изменяются. В последнее время у нас было достаточно этих бессмысленных слияний, и после долгого планирования мы наконец решили перейти на использование GIT ... так что эта проблема больше не должна нас беспокоить. Я бы хотел иметь четкий способ воспроизвести это, чтобы объяснить это. - person user972301; 08.10.2015
comment
@ user972301 отличный выбор. Я хорошо знаю Git и смогу помочь. - person VonC; 08.10.2015