You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取GitHub文件SHA值失败:返回undefined如何解决?

如何正确获取GitHub文件的SHA值?

你的问题出在请求返回的是文件原始内容,而非包含SHA值的文件元数据对象。从响应的content-type和x-github-media-type可以看出,当前请求处于raw模式,所以data字段是文件的内容字符串,自然拿不到sha。

解决方法

方法一:指定请求头获取元数据

在请求中添加Accept头,明确要求返回GitHub API的JSON格式元数据:

import {Octokit} from "https://cdn.skypack.dev/octokit";
import token from "./config.js";

const token_string = token.token_string;
export const octokit = new Octokit({
    auth: token_string,
});
const params = {
    owner: "na-czczo",
    repo: "r",
    file_path: "f.json"
};

const {data} = await octokit.request('GET /repos/{owner}/{repo}/contents/{file_path}', {
    ...params,
    headers: {
        'Accept': 'application/vnd.github.v3+json'
    }
});

console.log(`%c${data.sha}`, 'color: brown');

方法二:使用Octokit封装的REST方法

Octokit提供了更直观的REST API封装,避免手动拼接请求路径和头信息的错误:

import {Octokit} from "https://cdn.skypack.dev/octokit";
import token from "./config.js";

const token_string = token.token_string;
export const octokit = new Octokit({
    auth: token_string,
});

const {data} = await octokit.rest.repos.getContent({
    owner: "na-czczo",
    repo: "r",
    path: "f.json" // 注意参数名是path,不是file_path
});

console.log(`%c${data.sha}`, 'color: brown');

为什么之前的方法失效?

GitHub的/repos/{owner}/{repo}/contents/{path}接口会根据请求头或参数返回不同格式:

  • 当请求头Accept为application/vnd.github.v3.raw时,返回文件原始内容
  • 当请求头为application/vnd.github.v3+json时,返回包含sha、size、download_url等字段的元数据对象

你的请求默认触发了raw模式,所以无法获取SHA值。通过上述两种方法强制获取JSON元数据,就能拿到所需的SHA值。

内容的提问来源于stack exchange,提问作者trzczy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:15:02