重命名后如何找到存储库的新位置
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" 响应.
如果用户通过 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" 响应.