【问题标题】:GitHub v3 API - how do I create the initial commit in a repository?GitHub v3 API - 如何在存储库中创建初始提交?
【发布时间】:2012-06-03 03:24:17
【问题描述】:

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

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

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

谢谢

【问题讨论】:

标签: api github repository github-api


【解决方案1】:

自 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 存​​根和一个初始提交。

【讨论】:

    【解决方案2】:

    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 cmets),您可以先推送一个初始提交

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

    无论如何,这对initialize one's repository 来说是一个很好的做法。
    并在“git's semi-secret empty tree”中说明。

    【讨论】:

    • 谢谢。 API 支持创建存储库,但不支持它们,这真的很奇怪。
    【解决方案3】:

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

    1. 使用 Jai Pandya 的回答中的 auto_init 选项创建存储库; ,如果存储库已经存在,使用the create file endpoint 创建一个虚拟文件 - 这将创建分支:
    把 https://api.github.com/repos/USER/REPO/contents/dummy { “分支”:“主”, "message": "创建一个虚拟文件以创建分支", “内容”:“ZHVtbXk=” }

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

    1. 使用the create commit endpoint 创建指向the empty tree 的提交:
    发布 https://api.github.com/repos/USER/REPO/git/commits { "message": "初始提交", “树”:“4b825dc642cb6eb9a060e54bf8d69288fbee4904” }

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

    1. 使用the update reference endpoint 使分支指向您刚刚创建的提交(注意Use Of The ForceTM):
    补丁 https://api.github.com/repos/USER/REPO/git/refs/heads/master { "sha": "", “力”:真 }
    1. 完成!您的存储库现在有一个分支、一个提交和零个文件。

    【讨论】:

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