从裸存储库获取子模块哈希

Leo*_*ley 5 git jgit

我们有一个 gitolite 服务器,其中包含我们的客户定制应用程序。

每个应用程序都有一个子模块“存储库/核心”,它指的是我们的基础应用程序。

我们现在想要创建一个仪表板,显示所有客户的应用程序以及核心所在的版本。

gitolite 将所有内容存储在磁盘上的裸存储库中,仪表板应用程序可以直接访问存储库/或使用 ssh 密钥(如果更容易的话)。

我的问题是,如何从裸存储库中找出子模块所在的修订版以及谁提交了它?

pwa*_*ler 6

我只需要为 CI 服务器实现这个。棘手的部分是保留裸结帐。

我的解决方案如下:

1)git show HEAD:.gitmodules可用于获取子模块路径列表。

2) 对于每个path =,其第三个字段可用于确定子模块所在的 SHA:

git ls-tree -z -d HEAD -- <submodule path>


AlB*_*lue 2

您可以列出 来.gitmodules找出哪些路径被视为模块,然后遍历它们并找出<module>.git/HEAD/引用所指向的内容(可能是符号引用,例如ref: refs/heads/master,然后您必须将其链接起来才能找到 的值refs/heads/master)。然后,这将为您提供该模块的最新提交哈希值。