【问题标题】:GitHub v3 API: How to create initial commit for my shiny new repository?GitHub v3 API:如何为我闪亮的新存储库创建初始提交?
【发布时间】:2012-03-12 16:08:09
【问题描述】:

GitHub API 文档说:

Git DB API functions will return a 409 if the git repo for a Repository is empty or unavailable.

$repo/git/trees 上的 POST 确实返回 409。

那么我如何在存储库中创建初始提交?为了创建根提交,我是否必须强制用户手动提交一些无用的垃圾?

【问题讨论】:

  • 你可以自己运行git commit。
  • @SLaks 我不能——我想通过 github 的 API 从我的 web 应用程序中执行此操作。
  • 有这方面的消息吗?我也遇到了同样的问题。
  • 有人知道 GitHub 是否还在考虑这个吗?必须。有。现在! :-)
  • @aclark 不知道...IMO,写一张票来表示兴趣。

标签: git api github github-api


【解决方案1】:

我通过电子邮件向 github 支持发送了同样的问题,这是他们的回复:

From: Rick (GitHub Staff)
Subject: Creating an initial commit using the v3 API

Currently, you can't add the initial commit through the API.  Thanks for the
feedback. I've added your suggestion to the Feature Request List™ for the team
to see.

作为一种解决方法,根据您的用例,您可以创建分叉而不是新的存储库。

【讨论】:

  • @daniel-x-moore 我也想做同样的事情,创建一个新的存储库并将文件推送到其中(在 java 中使用 api v3),所以我不能通过API?
  • @cypronmaya 您目前无法通过 API 添加初始提交,但您可以通过命令行手动添加。
【解决方案2】:

2012 年 9 月 28 日更新

根据github博客上发布的this blogpost,现在可以在创建后自动初始化存储库。

今天,我们通过 GitHub API。到目前为止,您可以创建一个存储库,但您会 在添加任何内容之前,需要通过您的 Git 客户端在本地初始化它 通过 API 提交。

现在您可以选择在创建存储库时通过发送 auto_init 参数为 true:

 curl -i -u pengwynn \
      -d '{"name": "create-repo-test", "auto_init": true}' \
      https://api.github.com/user/repos 

生成的存储库将有一个 README 存​​根和一个初始提交。

【讨论】:

  • 欢迎取得进展,但不能解决初始用例。在那里,总是会创建存储库,但必须填充初始提交。
  • @Almad 我认为这回答了您最初的问题,即为新存储库创建新提交。简而言之,您需要在创建新存储库时进行此提交。以前无法通过 API 推送初始提交。
【解决方案3】:

2021 年 7 月 8 日更新

我面临一个类似的问题 - 我正在开发一个可以与 GitHub 集成的 Web 应用程序。在应用程序的流程中,用户可以添加指向 GitHub 存储库的链接,然后提交文件并将其推送到远程 GitHub 存储库。我为此使用 GitHub v3 API。

问题是提交一个文件,需要做一个请求链:

  1. 从 repo 中获取现有文件树
GET https://api.github.com/repos/USER/REPO/git/commits/COMMIT_SHA
  1. 创建新文件树
  2. 创建提交

对于第 1 步,您需要知道如果存储库完全为空,则提交的 sha 不存在。

如果 repo 为空且不包含任何文件,您可以像这样在其中添加文件(使用此 API,您可以添加没有提交 sha 的文件):

PUT https://api.github.com/repos/USER/REPO/contents/YOUR_FILE_NAME

{
  "branch": "BRANCH_NAME",
  "message": "COMMIT_MESSAGE",
  "content": "ENCODED_FILE_CONTENT"
}

ENCODED_FILE_CONTENT 可以通过btoa JS 函数获取,如下所示:

var encodedFileContent = btoa(fileString);

例如,以下请求将在名为“main”的分支中创建内容为“123”的test.js文件和提交的消息“test”。

PUT https://api.github.com/repos/USER/REPO/contents/test.js

{
  "branch": "main",
  "message": "test",
  "content": "MTIz"
}

【讨论】:

    猜你喜欢
    • 2012-06-03
    • 2011-01-05
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2016-02-27
    • 2020-12-03
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多