Получить мастер-коммит из субмодульного коммита

У меня есть главный репозиторий с двумя подмодулями. Когда я делаю git submodule status в master это дает мне недавний коммит в подмодулях. Но как я получу соответствующий коммит мастера.

Я могу видеть это только когда git log

Пример:

commit d111aeec...........28a7
Author: <author_name>
Date:   Mon Sep 24 17:01:01 2018 +0200

    Updated submodules: submodule1 -> ( 45d60a5 ) 

    Submodule 'submodule1 ' commits:
    *  45d60a5  - Some commit (author_name)

Мне нужен d111aeec........... 28a7. У меня 45d60a5.

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

1 ответ

Может быть несколько коммитов суперпроекта, которые используют один и тот же коммит субмодуля из этого субмодуля.

Если бы мы давали каждому суперпроекту коммит и подпроект коммит имени человека, это означало бы, например, что этот подпроект коммит Боб на танце, но в понедельник Алиса привела Боба, а в среду Кэрол привела Боба. Если я покажу вам снимок того, как Боб был на танцах, и спрошу вас: кто его привел? скажешь Алиса или Кэрол?

Все, что сказано, вы можете использовать git rev-parse на каждом коммите суперпроекта:

searchfor=$(git rev-parse HEAD)   # in submodule
cd ../../                         # as many ../-es as needed to get to superproject
git rev-list --branches | while read rev; do
    if [ $(git rev-parse $rev:path/to/submodule) = $searchfor ]; then
        echo superproject commit $rev uses submodule commit $searchfor
    fi
done

Это эквивалентно просмотру каждого снимка, чтобы увидеть, кто привел Боба в тот день. По сути, вы найдете Алису и Кэрол.

(Сценарий, приведенный выше, довольно небрежный и не проверен - он просто предназначен для иллюстрации метода.)

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