子模块的提交ID是否保存在git标签中?

时间:2014-02-05 03:09:44

标签: git github git-submodules git-tag

这背后的动力是管理GitHub的源代码库和维基库,并且能够git tag发布整个项目的状态。如果有更简单的方法可以解决这个问题,我会在评论中全力以赴:)


我需要能够在标记中包含某种子模块状态的标识符(例如,返回为git submodule status)。我不真的需要能够将所有打包(如Include a GitHub submodule automatically in download中所述) - 我只需要的能力包含此标识符 - 但我可以使用的任何其他功能 awesome

顺便说一句,我很惊讶这在.gitmodules没有跟踪。我理解它在.git中的某个地方,但似乎并没有跟踪其中的任何信息(这是不合理的。)

1 个答案:

答案 0 :(得分:0)

与子模块关联的提交ID作为commit对象存储在包含子模块的目录的tree对象中。例如,我在packstack本地检出了packstack/puppet/modules中有多个子模块;我们可以看到这样的提交:

$ git ls-tree HEAD | awk '/packstack/ {print $3}'
e7f8ff02ee9ceb26df165439fdffdad13e7ffe63
$ git ls-tree e7f8ff02ee9ceb26df165439fdffdad13e7ffe63 | awk '/puppet/ {print $3}'
0f710acfee985c3f8c3e559425a76194a4a809ea
$ git ls-tree 0f710acfee985c3f8c3e559425a76194a4a809ea | awk '/modules/ {print $3}'
1ccbe1d23c3ae2f2fe6aab987dd8d84d634012ef
$ git ls-tree 1ccbe1d23c3ae2f2fe6aab987dd8d84d634012ef
160000 commit 6d2dc044e12c4c687647cff8bc60c981d9ed5312  heat
160000 commit 17ba6a73cec7f386922e6a914a120a829e225efc  horizon
160000 commit fe9b0d5229ea37179a08c4b49239da9bc950acd1  inifile
160000 commit bb67ef3e0a7c605cee97f9a8ccd13000290f9b39  keystone
.
.
.

当然,您可以通过从HEAD以外的其他位置开始查看存储库以前版本的提交ID。