【问题标题】:How to get the git SHA1 of a git submodule without cloning the container git repo如何在不克隆容器 git repo 的情况下获取 git 子模块的 git SHA1
【发布时间】:2018-07-10 13:53:58
【问题描述】:

假设存在一个名为“A”的远程仓库,它在分支“Ab”中有一个名为“B”的子模块(“Ab”是“A”仓库的分支)。

我的机器中没有克隆 A 存储库,也不想克隆它。 我想知道 A 子模块的“Ab”分支的 B 子模块的 git SHA1,以便 git 存档。

我知道 A 和 B 的 URI(如果有帮助,它是一个“ssh://.... 地址)。

这可能吗? 怎么样?

顺便说一句,我没有 ssh 访问具有 A 和 B 存储库的机器,所以我不能执行“ssh -p port destination command”。如果有帮助,这台机器是一个 gerrit 服务器。

【问题讨论】:

  • 克隆 B,然后检查 Ab?
  • @evolutionxbox,Ab 是 A repo 中的一个分支,而不是 B repo 中的一个分支。
  • 你能在 bitbucket 或 github 之类的工具中看到 repo A 吗?您可以轻松找到 repo B 所需的提交 ID。

标签: git


【解决方案1】:

哈希 ID 嵌入在提交中——或者更专业地说,嵌入在包含子模块引用的任何目录的树对象中。例如,如果超级项目在 sub/mod/ule 处克隆子模块,则必须读取提交的树,找到名为 sub 的子树,读取 that 树并找到它的子树名为mod,阅读这第三个​​树并找到名为ule的条目。与此条目关联的哈希 ID 是要在子模块中签出的哈希 ID。

在不克隆存储库的情况下从 Git 存储库获取树对象的唯一标准方法是使用 git archive。但是,仅支持两种存档格式(tar 和 zip),对于这两种格式,git archive 将子模块写入一个空目录,省略哈希 ID。

这意味着唯一读取哈希 ID 的方法是克隆超级项目,除非您有其他软件生成它。

【讨论】:

  • 谢谢你,@torek,但我想避免克隆超级项目,因为超级项目很大并且需要大量时间和磁盘空间。此外,我不需要超级项目“A”来做任何事情。我只需要“B”。
  • @ctejeda:那么您需要在一台确实具有 A 克隆的机器上安装一些软件来为您读取该哈希值。一些托管系统有这样的软件(用于检索哈希 ID 的 Web 界面等),而另一些则没有。
  • 谢谢,@torek 可以使用 gitweb 或 gerrit 吗?
  • @ctejeda:我不知道 gerrit。我已经很久没有使用 gitweb 了,但我记得它有几个变种;你必须测试你正在使用的任何一个。
猜你喜欢
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2013-08-07
  • 1970-01-01
  • 2014-10-01
相关资源
最近更新 更多