GitHub v3 API - 如何在存储库中创建初始提交?

时间:2012-05-28 20:25:22

标签: api github repository github-api

我正在使用v3 API并设法列出repos / trees / branches,访问文件内容以及创建blob / trees / commit。我现在正在尝试创建一个新的repo,并设法用“POST user / repos”

来完成

但是当我尝试在这个新的repo中创建blob / trees / commits / references时,我得到了相同的错误消息。 (409)“Git Repository是空的。”显然,我可以通过git命令行自己启动存储库,但是如果我的应用程序为我做了它,那就更愿意了。

有办法吗?在创建空存储库后,我需要通过API做的第一件事是什么?

由于

3 个答案:

答案 0 :(得分:2)

自2012年起,根据GitHub博客上发布的this blog post,现在可以在创建后自动初始化存储库:

  

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

     

现在,您可以选择通过为auto_init参数发送true来初始化存储库:

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

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

答案 1 :(得分:1)

2013年5月更新:请注意,repository content API现在授权adding files

请参阅“File CRUD and repository statistics now available in the API”。


原始答案(2012年5月)

由于它似乎尚不支持(“GitHub v3 API: How to create initial commit for my shiny new repository?”,如aclark条评论),您可以先推送初始提交

git commit --allow-empty -m 'Initial commit'
git push origin master

无论如何,这对initialize one's repository来说是一个好习惯 它在“git's semi-secret empty tree”中有说明。

答案 2 :(得分:1)

如果您要创建初始提交(即没有任何文件的初始提交),可以执行以下操作:

  1. 使用Jai Pandya的答案中的auto_init选项创建存储库; ,如果存储库已经存在,请使用the create file endpoint创建一个虚拟文件-这将创建分支:
PUT https://api.github.com/repos/USER/REPO/contents/dummy

{
  "branch": "master",
  "message": "Create a dummy file for the sake of creating a branch",
  "content": "ZHVtbXk="
}

这将为您提供包括提交SHA在内的大量数据,但是由于我们将删除该提交,因此您可以丢弃所有数据。

  1. 使用the create commit endpoint创建指向the empty tree的提交:
POST https://api.github.com/repos/USER/REPO/git/commits

{
  "message": "Initial commit",
  "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904"
}

这一次,您需要记下返回的提交SHA。

  1. 使用the update reference endpoint将分支指向刚刚创建的提交(请注意使用Force TM ):
PATCH https://api.github.com/repos/USER/REPO/git/refs/heads/master

{
    "sha": "<the SHA of the commit>",
    "force": true
}
  1. 完成!您的存储库现在具有一个分支,一个提交和零个文件。