10

我正在使用 v3 API 并设法列出 repos/trees/branches、访问文件内容并创建 blobs/trees/commits。我现在正在尝试创建一个新的存储库,并设法使用“POST user/repos”来做到这一点

但是当我尝试在这个新的 repo 中创建 blobs/trees/commits/references 时,我会收到相同的错误消息。(409) “Git 存储库为空。”。显然,我可以通过 git 命令行自己去初始化存储库,但我宁愿我的应用程序为我做这件事。

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

谢谢

4

3 回答 3

2

根据GitHub 博客上发布的这篇博文,自 2012 年以来,现在可以在创建后自动初始化存储库:

今天,我们让通过 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 存​​根和一个初始提交。

于 2013-02-02T08:46:44.867 回答
1

2013 年 5 月更新:请注意,存储库内容 API现在授权添加文件

请参阅“ API 中现在提供的文件 CRUD 和存储库统计信息”。


原始答案(2012 年 5 月)

由于它似乎还不被支持(“ GitHub v3 API:如何为我闪亮的新存储库创建初始提交? ”,如aclark评论),您可以从推送初始提交开始

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

无论如何,这可能是初始化一个存储库的好习惯。
并在《git的半秘密空树》中有说明。

于 2012-05-29T20:15:30.570 回答
1

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

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

{
  “分支”:“主”,
  "message": "创建一个虚拟文件以创建分支",
  “内容”:“ZHVtbXk=”
}

这将为您提供一堆数据,包括提交 SHA,但您可以丢弃所有数据,因为我们即将删除该提交。

  1. 使用create commit 端点创建指向空树的提交:
发布 https://api.github.com/repos/USER/REPO/git/commits

{
  "message": "初始提交",
  “树”:“4b825dc642cb6eb9a060e54bf8d69288fbee4904”
}

这次你需要注意返回的提交 SHA。

  1. 使用更新参考端点使分支指向您刚刚创建的提交(注意 Use Of The Force TM):
补丁 https://api.github.com/repos/USER/REPO/git/refs/heads/master

{
    "sha": "<提交的 SHA>",
    “力”:真
}
  1. 完毕!您的存储库现在有一个分支、一个提交和零个文件。
于 2018-11-25T20:50:15.773 回答