是否可以通过Octokit查看GitHub存储库子模块的当前目标SHA?
我已经能够通过从“父”回购中检索.gitmodules文件来跟踪所有子模块,但是该文件没有维护子模块在子模块回购中所指向的位置。
事先尝试
在通过使用LibGit2Sharp通过子模块路径索引到commit来找到获取此信息的人之后,我在Octokit中进行了类似的尝试。
var submodulePathContents = await repositoriesClient.Content.GetAllContents(parentRepoId, "path/to/submodule");在调试器中执行这段代码时,我在局部变量/Autos中看到了这一点,因此它肯定知道我将它指向子模块路径。
System.Collections.Generic.IReadOnlyList.thisint.get名称:单工具路径:路径/到/子模块类型:子模块Octokit.RepositoryContent
不幸的是,当我从列表中获得实际内容时,submodulePathContents[0].Content只是null。
当您导航到子模块的父目录时,GitHub web接口肯定会显示这些信息,因此我认为我尝试了错误的方法。

为了获得这个子模块目标哈希,在Octokit中是否还有我错过的其他神奇方法?
发布于 2017-07-28 20:49:39
TL;DR
正如问题中所描述的,如果在.gitmodules中找到子模块路径上的内容,您将得到一段“子模块”类型的内容。这有空内容。
但是,如果您获得了同一子模块路径的父目录的内容,那么您将得到一个类型为"File“的内容,并带有您的子模块的路径(例如,上面的path/to/submodule )。此文件哈希是子模块自身存储库上的目标SHA。
详细信息
要获得子模块的SHA,您需要获取其父目录的内容,然后对表示子模块的文件进行索引。当直接进入路径时,就会得到某种类型的“子模块”,获取父内容将为您提供一堆"File“类型的内容(如果您有兄弟子目录,则会得到"Dir”)。奇怪的是,这个父内容列表排除了直接指向子模块路径时得到的“子模块”类型。
在上面的例子中,只需在路径上上升一级。
var submodulePathContents = await repositoriesClient.Content.GetAllContents(parentRepoId, "path/to"); // no longer "path/to/submodule"从这里,首先获取您想要的路径的内容项(例如“path /to/子模块”),它将有一个Sha字段,其中包含子模块的子模块存储库中的目标SHA。
using System.Linq;
…
var submoduleTargetSha = submodulePathContents.First(content => content.Path == submodulePath).Sha;下面是来自单开发回购的主子模块目录的一个示例条目。
Name: mono-tools Path: main/external/mono-tools Type:File Octokit.RepositoryContent
Content null string
DownloadUrl null System.Uri
EncodedContent null string
Encoding null string
GitUrl {https://api.github.com/repos/mono/mono-tools/git/trees/d858f5f27fa8b10d734ccce7ffba631b995093e5} System.Uri
HtmlUrl {https://github.com/mono/mono-tools/tree/d858f5f27fa8b10d734ccce7ffba631b995093e5} System.Uri
Name "mono-tools" string
Path "main/external/mono-tools" string
Sha "d858f5f27fa8b10d734ccce7ffba631b995093e5" string
Size 0 int
SubmoduleGitUrl null System.Uri
Target null string
Type File Octokit.ContentType
Url {https://api.github.com/repos/mono/monodevelop/contents/main/external/mono-tools?ref=master} System.Uri这个哈希和网络用户界面是一致的。

https://stackoverflow.com/questions/45381937
复制相似问题