конфликт слияния подмодулей git: как визуализировать? - PullRequest
6 голосов
/ 08 июня 2011

Я был очень счастлив, когда недавно узнал о

git submodule summary

, который хорошо показывает, что фиксация извлеченного коммита подмодуля находится впереди или позади ссылки в хранилище.

Теперь, когда я нахожусь в середине слияния с конфликтами подмодулей, эта же команда не дает полезного вывода. Мне нужна болезненная последовательность gitk в моем главном дереве, исследующая ветви, а также cd'ing в подмодули, выборка и gitk, сравнение значений sha1 ...

Что было бы более удобным способом получить картину конфликта?

Ответы [ 2 ]

2 голосов
/ 09 июня 2011

Вы можете сделать скрипт.Вот ядро ​​такого скрипта:

 git --git-dir=submodulepath/.git diff \
    $(git ls-tree HEAD submodulepath | cut -c 15-54) \
    $(git ls-tree MERGE_HEAD submodulepath | cut -c 15-54)

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

Существует также gitslave, который поможет вам с такими проблемами.

Надеюсь, это поможет.

0 голосов
/ 15 сентября 2014

То же, что и ответ Адама , но с использованием индекса и без вырезки:

sub="path/to/submodule"
git --git-dir="$sub/.git" diff \
    $(git rev-parse ":2:$sub") \
    $(git rev-parse ":3:$sub")

Объяснение:

При возникновении конфликта Git сохраняет информацию о немв указателе.Здесь хранятся несколько разных версий, так называемые этапы.Стадия 1 - это «базовая» версия (общий предок), стадия 2 - «наша», а стадия 3 - «их».

В случае конфликтов файлов в индексе содержатся идентификаторы объектов BLOB-объектов.для разных версий.В случае субмодулей это идентификаторы фиксации субмодуля.В приведенной выше команде :2:$sub относится к этапу 2 (нашему) подмодуля по пути $sub.

Обратите внимание, что вы можете увидеть список записей индекса с этапами, используя git ls-files --stage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...