Получить мастер-коммит из субмодульного коммита
У меня есть главный репозиторий с двумя подмодулями. Когда я делаю 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
Это эквивалентно просмотру каждого снимка, чтобы увидеть, кто привел Боба в тот день. По сути, вы найдете Алису и Кэрол.
(Сценарий, приведенный выше, довольно небрежный и не проверен - он просто предназначен для иллюстрации метода.)