GitHub v3 API:如何为我的全新存储库创建初始提交?

8

GitHub API文档指出:

如果Repository的Git repo为空或不可用,则Git DB API函数将返回409。

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

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


你可以自己运行 git commit - SLaks
@SLaks 我不行 - 我想通过 Github 的 API 从我的 Web 应用程序中执行该操作。 - Almad
有关这个问题的任何消息吗?我也遇到了同样的问题。 - Daniel X Moore
有人知道GitHub是否仍在考虑这个吗?必须要有,现在! :-) - aclark
@aclark 没有头绪... 我觉得最好写一张工单来表达兴趣。 - Almad
3个回答

7

更新于2012年9月28日

根据GitHub博客上这篇文章的说法,现在可以在创建后自动初始化存储库了。

今天,我们通过GitHub API更容易地向存储库添加提交。直到现在,您可以创建一个存储库,但是您需要通过Git客户端在本地初始化它,然后才能通过API添加任何提交。

现在,您可以选择在创建存储库时发送true以进行自动初始化:

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

生成的代码库将包含一个README文件和初始提交。

进展是受欢迎的,但并不能解决最初的用例。在那里,仓库总是被创建,但必须填充初始提交。 - Almad
@Almad 我认为这回答了你最初的问题,即关于为新存储库创建新提交的问题。简单来说,在创建新存储库时,您需要进行此提交。以前没有通过API推送初始提交的方法。 - Jai Pandya

6
我向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 我也想这么做,创建一个新的存储库并将文件推送到其中(使用API v3中的Java),那么我不能通过API添加初始提交吗? - cypronmaya
@cypronmaya 目前你无法通过API添加初始提交,但是你可以通过手动外壳命令行添加它。 - Daniel X Moore

0

2021年7月8日更新

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

问题是要提交一个文件,你需要进行一系列的请求:

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

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

如果存储库为空且不包含任何文件,则可以使用以下方式添加文件(使用此API可以在没有提交sha的情况下添加文件):

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

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

可以使用btoa JS函数获取ENCODED_FILE_CONTENT,如下所示:

var encodedFileContent = btoa(fileString);

例如,下面的请求将在名称为“main”的分支中创建具有内容“123”和提交信息“test”的test.js文件。
PUT https://api.github.com/repos/USER/REPO/contents/test.js

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接