Что показывает панель Changed Files вкладки VCS Log в WebStorm для объединенного коммита в Git

Документация для панели «Измененные файлы» на вкладке журнала говорится, что:

Панель «Измененные файлы» расположена справа от окна инструмента и показывает список файлов, которые были изменены в выбранной фиксации.

Однако мне интересно, что он показывает для фиксации слияния?

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

Например, у меня есть такая история:

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

и когда выбран merge branch 'l', панель «измененных файлов» пуста.

Разница для merge branch 'l' с i2 показывает один измененный файл a.txt, а разница для merge branch 'l' с l1 показывает один измененный файл a.txt и один добавленный файл c.txt. Таким образом, панель «Изменить файлы» не показывает этих различий.

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


person Max Koretskyi    schedule 30.11.2017    source источник
comment
Я не использую webstorm, поэтому могу только догадываться, но кажется вероятным, что они просто запускают git show и позволяют ему делать всю работу. git show для слияния создает комбинированный diff, который описан (не очень хорошо) в документации git diff, которая включает строку: Обратите внимание, что комбинированный diff перечисляет только файлы, которые были изменены из всех родительских файлов. Это означает, что merge:path имеет хэш-идентификатор, отличный от merge^1:path и merge^2:path (или слияние ^ n: путь для всех n родителей, для слияния осьминога).   -  person torek    schedule 30.11.2017
comment
Между прочим, это конкретное правило основано на сокращенном пути кода внутри механизма сравнения для коммитов слияния: чтобы избежать выполнения большого количества дорогостоящих вычислений, Git ныряет в объект дерева, прикрепленный к слиянию, и к (предположительно разные) деревья каждого из родителей. Он ищет конкретный идентификатор хэша для имен путей. Если путь существует в любом родительском элементе с тем же идентификатором, что и в дочернем, этот путь удаляется из списка кандидатов в файлы. Этот же сокращенный код частично используется для реализации --follow.   -  person torek    schedule 30.11.2017
comment
@torek, большое спасибо за комментарий! Итак, то, что вы говорите, похоже, согласуется с моими наблюдениями: ... на панели показаны файлы, которые конфликтовали во время слияния и были не разрешены с использованием содержимого любой из конфликтующих сторон, но скорее были разрешены с использованием настраиваемого содержимого, отличного от любых коммитов ветки, участвующих в слиянии, правильно? Я немного сбит с толку, потому что без конфликта и ручной пользовательской модификации хэш path все равно может отличаться от обоих родителей, верно? Webstorm, похоже, не показывает такие объединенные пути   -  person Max Koretskyi    schedule 04.12.2017
comment
Кроме того, не могли бы вы уточнить второй комментарий, я его не понял   -  person Max Koretskyi    schedule 04.12.2017
comment
Это сложно объяснить хорошо, отчасти потому, что сложно даже понять. Сам код находится в tree-diff.c. Пояснительный комментарий здесь, если только вы знакомы с алгоритмами сравнения, это может быть совершенно бесполезно. Записи в дереве сортируются (сортировка по ASCII), так что min - это следующий файл как бы по алфавиту.   -  person torek    schedule 04.12.2017
comment
Функции обработки (определенные в другом месте - около строки 180) - это то, что определяет, какие пути сохранятся до финального различия. По умолчанию для комбинированного сравнения проверяются хеш-идентификаторы, прикрепленные к каждому родительскому элементу, по сравнению с хеш-идентификатором для текущего дерева (или отсутствие хеш-идентификатора, когда файлы отсутствуют). Если включено обнаружение переименования или копирования, похоже, что непарные файлы могут быть спарены получателями-отправителями, но мне это совсем не ясно.   -  person torek    schedule 04.12.2017
comment
@torek, спасибо, думаю имеет смысл создать отдельный вопрос как unified diff works. Что вы думаете?   -  person Max Koretskyi    schedule 04.12.2017
comment
под унифицированным различием обычно понимается сравнение против контекста или даже без контекста. комбинированные различия Git характерны для Git. Так что я не уверен, о чем вы спрашиваете. Кроме того, любой графический интерфейс может выполнять свои особые функции: программа всегда может запускать git show -m при фиксации слияния, чтобы разделить ее на N отдельных различий, по одному для каждого родителя.   -  person torek    schedule 04.12.2017
comment
@torek, да, я спрашивал про combined diff. Но, наверное, сначала мне нужно выяснить, какую команду выполняет IntelliJ. Цените ваши комментарии   -  person Max Koretskyi    schedule 05.12.2017


Ответы (1)


До 2017.3 для коммитов слияния он показывал разницу, введенную внутри этого коммита слияния (точно так же, как git show).

В 2017.3 была добавлена ​​новая функция для отображения различий по сравнению с каждым родительским https://youtrack.jetbrains.com/issue/IDEA-148143

person Dmitriy Smirnov    schedule 06.12.2017
comment
спасибо, так где я могу прочитать об этой новой функции в 2017.3? и, в частности, алгоритм (команды git), который он использует для отображения файлов? так ли это показано в этом комментарии - вместе, из обе команды git diff? git show команда не используется? - person Max Koretskyi; 07.12.2017
comment
Нет никакой документации, определяющей это, но зачем вам знать точные команды? git show не используется. До изменения использовалось git log -c, теперь git log -m используется для поиска изменений по сравнению со всеми родителями. Рассчитываются конфликтующие файлы. - person Dmitriy Smirnov; 08.12.2017
comment
Я хотел знать точные команды, потому что тогда я мог читать документацию по git и понимать, какой алгоритм используется для отображения файлов там. Вы говорите, что сейчас используется git log -m, не могли бы вы рассказать немного о Conflicted files are calculated? - person Max Koretskyi; 10.12.2017