从子模块提交获取主提交

时间:2018-09-26 12:13:13

标签: git version-control git-submodules git-commit git-tag

我有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

编辑:提出这个问题的原因是在我的项目中,我有一个标记机制来标记子模块的提交。我需要对超级存储库中的相应提交使用相同的标记。如果有人可以帮助我吗?

1 个答案:

答案 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。

(上面的脚本相当草率,并且未经测试,仅用于说明该方法。)