我有2个子模块的主存储库。当我在master中执行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 。
编辑:提出这个问题的原因是在我的项目中,我有一个标记机制来标记子模块的提交。我需要对超级存储库中的相应提交使用相同的标记。如果有人可以帮助我吗?
答案 0 :(得分:0)
可能有多个超级项目提交使用该子模块中的 same 子模块提交。
如果我们给每个超级项目提交和子项目提交一个人的名字,那意味着,例如,子项目提交鲍勃在跳舞,但周一爱丽丝带来了鲍勃,而周三,卡罗尔带来了鲍勃。如果我给你看鲍勃在跳舞的快照,问你:谁带来了他?你会说爱丽丝还是卡罗尔?
所有这些,您可以在每个超级项目提交中使用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
这等效于查看每一个快照,以查看谁在当天 带来了Bob。实际上,您会发现Alice 和 Carol。
(上面的脚本相当草率,并且未经测试,仅用于说明该方法。)