如何使用API删除GitHub仓库

21

我正在熟悉GitHub APIhttp://developer.github.com/v3/,我尝试使用Firefox的RESTClient插件和curl命令行工具进行测试。

我已经找出如何使用API创建存储库,但是我似乎无法使用API删除它。

根据这里的帮助:http://developer.github.com/v3/repos/#delete-a-repository,我必须像这样发送一个DELETE请求:

curl -X DELETE -H 'Authorization: token xxx' https://api.github.com/repos/:owner/:repo

帮助文档没有说明,我不确定:owner和:repo的含义是名称还是ID,但我尝试过使用名称和ID进行多种组合,但均未成功。我收到的响应是:

404 Not Found

我错过了什么?


如果你有 github.com/foo/bar,那么 :ownerfoo:repobar - user247702
谢谢,但是还是`curl -X DELETE -H 'Authorization: token xxx' https://api.github.com/repos/foo/bar`不起作用。 - Pavel Tankov
使用虚假凭证和不存在的存储库会得到什么?我得到了这个:$ curl -X DELETE -H 'Authorization: token xxx' https://api.github.com/repos/foo/bar { "message": "凭据无效", "documentation_url": "http://developer.github.com/v3" } - user247702
我正在使用正确的凭据。我在这里放置“xxx”只是作为占位符,因为我不想透露我的真实令牌。 - Pavel Tankov
是的,但是当您执行该精确请求时,会得到什么?您会像我一样收到相同的错误消息,还是404? - user247702
2个回答

29
如果您是通过应用程序页面创建正在使用的令牌,则此令牌将具有以下作用域userpublic_reporepogist。您可以通过使用该令牌进行API请求并查看响应HTTP标头来验证这一点:

curl -v -H 'Authorization: token xxx' https://api.github.com

查找X-OAuth-Scopes响应标头,其中将列出作用域列表:

X-OAuth-Scopes: user, public_repo, repo, gist

但是,要删除存储库,令牌需要具有delete_repo权限

因此,您需要具有不同作用域的令牌。您可以使用授权API创建这样的令牌:

curl -v -u 用户名 -X POST https://api.github.com/authorizations -d '{"scopes":["delete_repo"], "note":"token with delete repo scope"}'

这将返回一个JSON文档,其中包含新的令牌,您应该能够使用它来删除存储库:

{
  "id": XXXXX,
  "url": "https://api.github.com/authorizations/XXXXX",
  "app": {
    "name": "GitHub API",
    "url": "http://developer.github.com/v3/oauth/#oauth-authorizations-api",
    "client_id": "00000000000000000000"
  },
  "token": "XXXXXX",
  "note": "token with delete repo scope",
  "note_url": null,
  "created_at": "2013-10-11T20:34:49Z",
  "updated_at": "2013-10-11T20:34:49Z",
  "scopes": [
    "delete_repo"
  ]
}

当然,以这种方式创建令牌时,您可以请求多个范围,而不仅仅是delete_repo范围。

另外,值得一提的是,API在您没有正确授权时返回404错误的原因是为了防止信息泄漏


3
Github网站用户界面现在提供了创建具有多个范围的令牌的方法。如果@Ivan Zuzak可以更新他的答案,包括如何从命令行创建多个范围令牌的当前示例,那将非常感激。我的尝试使用curl -v -u username -X POST https://api.github.com/authorizations -d '{"scopes":["delete_repo"]}'没有成功--可能是因为API自原帖以来发生了变化。 - lawlist
2
原帖中 ... /:owner/:repo 的示例不正确 -- 冒号需要去掉 -- 这里是一个当前的示例,其中包含一个已创建的 delete_repo 授权令牌:curl -X DELETE -H 'Authorization: token xxx' https://api.github.com/repos/USERNAME/NAME-OF-REPO - lawlist
1
@lawlist 你可能收到一条警告,提示你没有提供“注意事项”这个最近成为必填字段的内容:https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization。我更新了示例以包括说明。如果你还有问题,请告诉我API返回的错误信息。 - Ivan Zuzak
1
此外,这些冒号是描述URL路径部分中参数的标准方式:https://developer.github.com/v3/#parameters - Ivan Zuzak
1
非常感谢您更新示例,并解释冒号是描述将替换为变量信息的参数的一种可接受方法。如果有人将来需要,这里是一个基于您更新后的示例的多范围令牌示例:curl -v -u USERNAME:PASSWORD -X POST https://api.github.com/authorizations -d '{"scopes":["delete_repo","repo","gist","user"], "note":"Token with multiple scopes."}' - lawlist
显示剩余2条评论

20

删除 GitHub 存储库

curl \
  -X DELETE \
  -H "Accept: application/vnd.github.v3+json" \
  -H "Authorization: token ${token}" \
   https://api.github.com/repos/${username}/${reponame}

定义或替换${token}${username}${reponame}token必须具有访问delete_repo作用域的权限。


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