重命名后如何找到存储库的新位置

How to find the new location of a repository after a rename

如果用户通过 GitHub 的 UI 将存储库从 foo/bar.git 重命名为 foo/baz.git,我如何通过 API 检测到这一点?

目前,如果我这样调用 API,我会收到 404:

GET /repos/foo/bar

如何找到新的存储库名称?

我认为如果您使用该名称,则无法通过 API。

一些 hack 是检索该用户的所有存储库,然后存储每个存储库的 ID 及其名称。如果您知道存储库经常更改其名称,则您总是这样做。然后你通过 ID 得到那个存储库的名称,你不会有重命名的问题。

因此 GitHub 不会通过 API 公开重命名。

UPDATE:这不再是真的,这个答案已经过时了; the API has exposed renames since July 2015.

考虑到您的问题的限制(即,只是存储库名称发生了变化,而不是 user/organization),您可以依赖存储库 ID。

如果您在重命名之前有关于 repo 的信息,您应该有 API 返回的 ID。如果你这样做然后有弹性访问存储库,你只需要做

GET /repositories/1234

而且无论名称是否更改(假设您仍然可以访问它),您将始终获得存储库。

一个更好的例子,就是做

GET https://api.github.com/repositories/1234

(或任何您的 GitHub 企业实例)。

其他答案已过时; As of July 21, 2015, the API does expose renames,当您 GET /repos/foo/bar 时,您应该收到

{
  "message": "Moved Permanently",
  "url": "https://api.github.com/repositories/<numeric id>",
  "documentation_url": "https://developer.github.com/v3/#http-redirects"
}

那么如果你 GET /repositories/<numeric id> 响应将包含

{
  full_name: 'foo/baz'
  ...
}

此外,您现在应该能够 GET /repos/foo/baz 并收到相同的回复。

如果您尝试访问私有存储库,请确保在您使用的个人访问令牌上选择了 "Full control of private repositories" 范围,否则当您请求 GET /repos/foo/baz 时,您将得到令人困惑的 404或 GET /repos/<numeric id> 即使 GET /repos/foo/bar 名称)也会让您得到上面的 "Moved Permanently" 响应.