使用 Octokit 通过提交哈希获取文件内容
Get file contents by commit hash using Octokit
我无法获取给定提交哈希的文件内容。我从默认分支获取当前文件版本,无论我的参考散列如何。
我唯一的猜测是 ref 不能是普通哈希,但是 documentation 将 'ref' 描述为 "The name of the commit/branch/tag." 并且没有给出进一步的格式化说明。
我用 runkit here 复制了这个问题。并在下面提供了我的实际项目的代码。
async getDifference(): Promise<void> {
let oldFile = await this.gitHubApi.getContent(this.repo.owner.login, this.repo.name, `./${this.file}`, this.oldHash);
let newFile = await this.gitHubApi.getContent(this.repo.owner.login, this.repo.name, `./${this.file}`, this.newHash);
if(oldFile.data.content === newFile.data.content) {
console.log('no differencce');
} else {
...
}
return;
}
public getContent(owner: string, repo: string, path: string, ref?: string): Promise<any> {
if(ref) {
return this.octokit.repos.getContent({
owner: owner,
repo: repo,
path: path,
ref: ref
});
} else {
return this.octokit.repos.getContent({
owner: owner,
repo: repo,
path: path
});
}
}
看起来这是 octokit/rest 中的错误,或者至少是意外行为,但可以说您给它的输入有误。来自 your example:
path: './test.txt/'
Octokit 不喜欢前导 ./
,但如果您提供尾部斜杠,它会容忍它。然而,尾部斜杠导致它忽略 ref
arg,即 path: 'test.txt/'
失败并出现与您看到的相同的错误。 (并且可以说是错误的:斜杠暗示一个文件夹,而这只是一个文件 - 为什么要添加斜杠?)你真的想要
path: 'test.txt'
可能值得针对 octokit/rest 提出问题,但如果您从路径中删除前导 ./
和尾随 /
,它应该可以正常工作。
顺便说一下,根据您的评论
note that the object 'sha's are the same, and that neither match the provided 'ref' hash.
这是意料之中的:提供的 ref 是针对提交的,它是提交元数据和根树的哈希,它是根文件夹索引的哈希,它包含对象 SHA 哈希。
我无法获取给定提交哈希的文件内容。我从默认分支获取当前文件版本,无论我的参考散列如何。
我唯一的猜测是 ref 不能是普通哈希,但是 documentation 将 'ref' 描述为 "The name of the commit/branch/tag." 并且没有给出进一步的格式化说明。
我用 runkit here 复制了这个问题。并在下面提供了我的实际项目的代码。
async getDifference(): Promise<void> {
let oldFile = await this.gitHubApi.getContent(this.repo.owner.login, this.repo.name, `./${this.file}`, this.oldHash);
let newFile = await this.gitHubApi.getContent(this.repo.owner.login, this.repo.name, `./${this.file}`, this.newHash);
if(oldFile.data.content === newFile.data.content) {
console.log('no differencce');
} else {
...
}
return;
}
public getContent(owner: string, repo: string, path: string, ref?: string): Promise<any> {
if(ref) {
return this.octokit.repos.getContent({
owner: owner,
repo: repo,
path: path,
ref: ref
});
} else {
return this.octokit.repos.getContent({
owner: owner,
repo: repo,
path: path
});
}
}
看起来这是 octokit/rest 中的错误,或者至少是意外行为,但可以说您给它的输入有误。来自 your example:
path: './test.txt/'
Octokit 不喜欢前导 ./
,但如果您提供尾部斜杠,它会容忍它。然而,尾部斜杠导致它忽略 ref
arg,即 path: 'test.txt/'
失败并出现与您看到的相同的错误。 (并且可以说是错误的:斜杠暗示一个文件夹,而这只是一个文件 - 为什么要添加斜杠?)你真的想要
path: 'test.txt'
可能值得针对 octokit/rest 提出问题,但如果您从路径中删除前导 ./
和尾随 /
,它应该可以正常工作。
顺便说一下,根据您的评论
note that the object 'sha's are the same, and that neither match the provided 'ref' hash.
这是意料之中的:提供的 ref 是针对提交的,它是提交元数据和根树的哈希,它是根文件夹索引的哈希,它包含对象 SHA 哈希。