【问题标题】:How to find the new location of a repository after a rename重命名后如何找到存储库的新位置
【发布时间】:2023-03-28 08:45:01
【问题描述】:

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

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

GET /repos/foo/bar

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

【问题讨论】:

    标签: github github-api


    【解决方案1】:

    所以 GitHub 不会通过 API 公开重命名。

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

    鉴于您的问题的限制(即,只是存储库名称已更改,而不是用户/组织),您可以依赖存储库 ID。

    如果您在重命名之前有关于 repo 的信息,您应该有 API 返回的 id。如果您这样做是为了获得对存储库的弹性访问,您只需要这样做

    GET /repositories/1234
    

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

    一个更好的例子,是做

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

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

    【讨论】:

    • 嗯,这在 github api 上没有记录。我从不知道您可以使用存储库 ID。
    • 是的。对于是否应该记录在案,他们有很多争论。用户也有类似的功能。无论哪种方式,它都是众所周知的,我很确定它也得到了很好的支持。我维护了一个绑定库,并且很乐意将其作为其中的一部分来支持(这只有在您知道我对功能的保守程度时才有意义)。
    【解决方案2】:

    其他答案已过时; 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/&lt;numeric id&gt; 回复将包含

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

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

    如果您尝试访问私有存储库,请确保在您使用的个人访问令牌上选择了“完全控制私有存储库”范围,否则当您请求 GET /repos/foo/baz 或 @ 时,您会混淆地得到 404 987654328@,尽管GET /repos/foo/bar名称)会给您上面的“永久移动”响应。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 是否可以通过 ID 进行查找?
      • 不通过 API。另一个 hack: - 向普通存储库发出 GET 请求;例如github.com/username/reponame; - 如果您收到状态码 200,则存储库未重命名。如果您收到 301,则它已被重命名,您解析响应以获取它的新 URL。您要使用哪种方法取决于您。如果你有更好的,请分享。
      • 访问 UI 有点困难,因为我不能使用用户的 access_token 来做到这一点。我需要这样做,因为它可能是一个私有存储库。
      • 我明白了。我暂时没有其他想法。如果你仍然需要这个,你可以向 Github 的支持人员提出问题。我发现它们非常有帮助:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 2012-12-04
      相关资源
      最近更新 更多