Github API 创建提交

yet*_*ety 5 api json http commit github

我需要 Github API 方面的帮助,

我需要通过 api 提交新版本的文件,我试图通过向

https://api.github.com/repos/:username/:repo:/git/commits/
Run Code Online (Sandbox Code Playgroud)

有数据

{
    "login": "username",
    "token": "auth_token",
    "parent_commit": "sha",
    "message": "commit message.",
    "content": {
        "path": "full/path",
        "mode": "edit",
        "data": "new content"
    }
}
Run Code Online (Sandbox Code Playgroud)

但结果失败 - 未找到。

有没有人知道在哪里发送这个请求以及这种格式是否正确?

(格式的灵感来自 - http://swanson.github.com/blog/2011/07/23/digging-around-the-github-api-take-2.html

谢谢!

Von*_*onC 8

请注意,自 2013 年 5 月起,您可以使用 CRUD API

其中包括文件更新 API

{
  "message": "my commit message",
  "committer": {
    "name": "Scott Chacon",
    "email": "schacon@gmail.com"
  },
  "content": "bXkgdXBkYXRlZCBmaWxlIGNvbnRlbnRz",
  "sha": "329688480d39049927147c162b9d2deaf885005f"
}
Run Code Online (Sandbox Code Playgroud)

(内容是更新后的文件内容,Base64 编码。)


Von*_*onC 6

\n

提交新内容实际上是一个多步骤的过程,需要使用低级且强大的 API

\n
\n

实际上,从 2021 年 9 月(9 年后)开始,就不是了,而是使用 GraphQL GitHub API v4(而不是GitHub API v3

\n

看:

\n
\n

用于创作提交的更简单的 API

\n

新的 GraphQL 突变createCommitOnBranch使得在存储库分支中添加、更新和删除文件变得更加容易。

\n

与现有的Git 数据库 REST API相比,这个新 API 提供了一种更简单的提交更改的方法。
\n使用新的createCommitOnBranch突变,您无需在创建提交之前手动创建 blob 和树。这允许您在单个 API 调用中添加、更新或删除多个文件。

\n

使用新 API 编写的提交会自动进行 GPG 签名,并在 GitHub UI 中标记为已验证。GitHub 应用程序可以使用突变直接或代表用户创作提交。

\n
\n
$ curl https://api.github.com/graphql \\ \n       -s -H "Authorization: bearer $TOKEN"\n       --data @- <<GRAPHQL | jq \\\n         \'.data.createCommitOnBranch.commit.url[0:56]\'\n{\n  "query": "mutation (\\$input: CreateCommitOnBranchInput!) {\n    createCommitOnBranch(input: \\$input) { commit { url } } }",\n\n  "variables": {\n    "input": {\n      "branch": {\n        "repositoryNameWithOwner": "demo-githubs/test",\n        "branchName": "main"\n      },\n      "message": {"headline": "Hello from GraphQL!" },\n      "fileChanges": {\n        "additions": [{\n            "path": "GraphQL.md",\n            "contents": "`echo \'Hello, GraphQL! | base64`"\n        }],\n        "deletions": [{ "path": "REST.txt" }]\n      },\n      "expectedHeadOid": "git rev-parse HEAD"\n}}}\nGRAPHQL\n
Run Code Online (Sandbox Code Playgroud)\n

图ql

\n
\n
\n

我可以使用 api 设置提交者吗?

\n
\n

是的,您应该能够在 GitHub 操作中将机器人设置为提交者,但不能使用 API。

\n

正如评论中的\xe6\xb2\x99\xe6\xbc\xa0\xe4\xb9\x8b\xe5\xad\x90 所指出的:

\n
\n

目前,API v4CreateCommitOnBranch明确不支持设置提交者。
\nAPI v3 创建带有签名的提交,并且必须设置私钥。
\n请参阅“通过 API 创建签名提交”。

\n
\n

没有API:

\n

当您使用 GitHub 操作提交文件时,默认提交者是 GitHub Actions 机器人。git但是,您可以通过在提交之前设置用户和电子邮件来自定义提交者。

\n

在您的 GitHub 操作工作流程文件(例如)中,您可以在提交之前.github/workflows/main.yml配置用户和电子邮件。git

\n
name: Committer Action\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout code\n      uses: actions/checkout@v2\n\n    - name: Configure git\n      run: |\n        git config user.name "Your Bot Name"\n        git config user.email "bot@example.com"\n\n    - name: Make a commit\n      run: |\n        echo "New Content" > file.txt\n        git add file.txt\n        git commit -m "Commit by bot"\n        git push\n
Run Code Online (Sandbox Code Playgroud)\n

这样,机器人将被视为通过此操作推动的任何更改的提交者。

\n


Har*_*ood 4

我也很困惑这个问题!

提交新内容实际上是一个多步骤的过程,需要使用低级且强大的 API。

这是我分享一个解决方案的要点。请注意,有些内容是硬编码的,例如分支名称“master”。

请随意分叉并改进要点,或者如果您在运行时遇到问题,请告诉我。