如何在不克隆容器git repo的情况下获取git子模块的git SHA1

时间:2018-07-10 13:53:58

标签: git

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

我的计算机中没有克隆A repo,也不想克隆。 我想知道A子模块的“ Ab”分支的B子模块的git SHA1,以便对其进行git归档。

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

有可能吗? 怎么样?

顺便说一句,我没有对具有A和B存储库的计算机的ssh访问权限,因此我无法执行“ ssh -p port destination command”。如果有帮助,则该计算机是Gerrit服务器。

1 个答案:

答案 0 :(得分:0)

哈希ID嵌入在提交中,或更确切地说,嵌入在树对象中,无论包含子模块引用的目录如何。例如,如果超级项目在sub / mod / ule中克隆了子模块,则必须读取提交的树,找到名为localhost:8080/hello/hey Output: hey null localhost:8080/hellodiff?key="cool" Output: null "cool" 的子树,读取那个树并找到其树。子树sub,请阅读这棵第三树并找到名为mod的条目。与此条目关联的哈希ID是要在子模块中签出的哈希ID。

从Git存储库获取树对象而不复制存储库的唯一标准方法是使用ule。但是,只有两种受支持的存档格式(tar和zip),对于这两种格式,git archive都将一个子模块写为空目录,省略了哈希ID。

这意味着,除非您使用其他生成散列ID的软件,否则 only 读取散列ID的方法就是克隆超级项目。