Class ReposClient

java.lang.Object
ink.icoding.github4j.GithubClient
ink.icoding.github4j.client.ReposClient

public class ReposClient extends GithubClient
GitHub 仓库相关 API 客户端。

提供仓库的 CRUD 操作、分支管理、协作者管理、文件内容操作、 Fork、Stargazers、Watchers、Topics、License 等功能。

See Also:
  • Constructor Details

  • Method Details

    • get

      public GithubResponse<Repository> get(String owner, String repo)
      获取指定仓库的详细信息。

      API 端点: GET /repos/{owner}/{repo}

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      Returns:
      仓库详细信息
    • create

      public GithubResponse<Repository> create(CreateRepoRequest request)
      为当前认证用户创建一个新仓库。

      API 端点: POST /user/repos

      Parameters:
      request - 创建仓库的请求参数
      Returns:
      创建成功后的仓库信息
    • createForOrg

      public GithubResponse<Repository> createForOrg(String org, CreateRepoRequest request)
      在指定组织下创建一个新仓库。

      API 端点: POST /orgs/{org}/repos

      Parameters:
      org - 组织名称
      request - 创建仓库的请求参数
      Returns:
      创建成功后的仓库信息
    • update

      public GithubResponse<Repository> update(String owner, String repo, UpdateRepoRequest request)
      更新指定仓库的信息。

      API 端点: PATCH /repos/{owner}/{repo}

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      request - 更新仓库的请求参数
      Returns:
      更新后的仓库信息
    • delete

      public void delete(String owner, String repo)
      删除指定仓库。当前认证用户必须拥有该仓库的管理员权限。

      API 端点: DELETE /repos/{owner}/{repo}

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
    • listForAuthenticatedUser

      public Page<Repository> listForAuthenticatedUser(ListReposOptions options)
      列出当前认证用户的所有仓库。

      API 端点: GET /user/repos

      Parameters:
      options - 查询选项(可为 null),支持 visibility、affiliation、type、sort、direction、since、before 等参数
      Returns:
      仓库分页列表
    • listForUser

      public Page<Repository> listForUser(String username, ListUserReposOptions options)
      列出指定用户的仓库。

      API 端点: GET /users/{username}/repos

      Parameters:
      username - 用户名
      options - 查询选项(可为 null),支持 type、sort、direction、since、before 等参数
      Returns:
      仓库分页列表
    • listForOrg

      public Page<Repository> listForOrg(String org, ListOrgReposOptions options)
      列出指定组织的仓库。

      API 端点: GET /orgs/{org}/repos

      Parameters:
      org - 组织名称
      options - 查询选项(可为 null),支持 type、sort、direction、since、before 等参数
      Returns:
      仓库分页列表
    • listCollaborators

      public Page<User> listCollaborators(String owner, String repo, ListCollaboratorsOptions options)
      列出指定仓库的协作者。

      API 端点: GET /repos/{owner}/{repo}/collaborators

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      options - 查询选项(可为 null),支持 affiliation 参数
      Returns:
      协作者用户分页列表
    • isCollaborator

      public boolean isCollaborator(String owner, String repo, String username)
      检查指定用户是否为仓库的协作者。

      API 端点: GET /repos/{owner}/{repo}/collaborators/{username}

      如果返回 204 表示是协作者,404 表示不是。

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      username - 要检查的用户名
      Returns:
      如果是协作者返回 true,否则返回 false
    • addCollaborator

      public void addCollaborator(String owner, String repo, String username, Map<String,String> options)
      添加协作者到指定仓库。

      API 端点: PUT /repos/{owner}/{repo}/collaborators/{username}

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      username - 要添加的用户名
      options - 协作者配置参数(可为 null),例如 permission 等
    • removeCollaborator

      public void removeCollaborator(String owner, String repo, String username)
      从指定仓库移除协作者。

      API 端点: DELETE /repos/{owner}/{repo}/collaborators/{username}

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      username - 要移除的用户名
    • listBranches

      public Page<Branch> listBranches(String owner, String repo, ListBranchesOptions options)
      列出指定仓库的分支。

      API 端点: GET /repos/{owner}/{repo}/branches

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      options - 查询选项(可为 null),支持 isProtected 参数筛选受保护分支
      Returns:
      分支分页列表
    • getBranch

      public GithubResponse<Branch> getBranch(String owner, String repo, String branch)
      获取指定仓库的某个分支信息。

      API 端点: GET /repos/{owner}/{repo}/branches/{branch}

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      branch - 分支名称
      Returns:
      分支详细信息
    • getBranchProtection

      public GithubResponse<Protection> getBranchProtection(String owner, String repo, String branch)
      获取指定分支的保护规则。

      API 端点: GET /repos/{owner}/{repo}/branches/{branch}/protection

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      branch - 分支名称
      Returns:
      分支保护规则信息
    • updateBranchProtection

      public GithubResponse<Protection> updateBranchProtection(String owner, String repo, String branch, Protection protection)
      更新指定分支的保护规则。

      API 端点: PUT /repos/{owner}/{repo}/branches/{branch}/protection

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      branch - 分支名称
      protection - 新的分支保护规则
      Returns:
      更新后的分支保护规则信息
    • deleteBranchProtection

      public void deleteBranchProtection(String owner, String repo, String branch)
      删除指定分支的保护规则。

      API 端点: DELETE /repos/{owner}/{repo}/branches/{branch}/protection

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      branch - 分支名称
    • getContent

      public GithubResponse<Content> getContent(String owner, String repo, String path, String ref)
      获取仓库中指定路径的文件或目录内容。

      API 端点: GET /repos/{owner}/{repo}/contents/{path}

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      path - 文件或目录路径
      ref - 分支、标签或 commit SHA(可为 null,默认使用仓库的默认分支)
      Returns:
      文件或目录的内容信息
    • createOrUpdateFile

      public GithubResponse<Map<String,Object>> createOrUpdateFile(String owner, String repo, String path, CreateOrUpdateFileRequest request)
      创建或更新仓库中的单个文件。

      API 端点: PUT /repos/{owner}/{repo}/contents/{path}

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      path - 文件路径
      request - 创建或更新文件的请求参数(包含 message、content、sha 等)
      Returns:
      文件操作结果,包含 content 和 commit 信息
    • listLanguages

      public Map<String,Integer> listLanguages(String owner, String repo)
      列出仓库中使用的编程语言及其字节数。

      API 端点: GET /repos/{owner}/{repo}/languages

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      Returns:
      语言名称到字节数的映射
    • getTopics

      public Topics getTopics(String owner, String repo)
      获取仓库的主题标签列表。

      API 端点: GET /repos/{owner}/{repo}/topics

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      Returns:
      主题标签列表
    • replaceTopics

      public void replaceTopics(String owner, String repo, List<String> topics)
      替换仓库的主题标签列表。需要仓库的管理员权限。

      API 端点: PUT /repos/{owner}/{repo}/topics

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      topics - 新的主题标签列表
    • listForks

      public Page<Repository> listForks(String owner, String repo, ListForksOptions options)
      列出指定仓库的所有 Fork。

      API 端点: GET /repos/{owner}/{repo}/forks

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      options - 查询选项(可为 null),支持 sort 参数(newest、oldest、stargazers、watchers)
      Returns:
      Fork 仓库分页列表
    • createFork

      public GithubResponse<Repository> createFork(String owner, String repo, Map<String,String> options)
      Fork 指定仓库到当前认证用户的账户或指定组织下。

      API 端点: POST /repos/{owner}/{repo}/forks

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      options - Fork 配置参数(可为 null),例如 organization 等
      Returns:
      Fork 成功后的仓库信息
    • listStargazers

      public Page<User> listStargazers(String owner, String repo, PageOptions options)
      列出给仓库点了 Star 的用户。

      API 端点: GET /repos/{owner}/{repo}/stargazers

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      options - 分页选项(可为 null),支持 per_page 和 page 参数
      Returns:
      点了 Star 的用户分页列表
    • listWatchers

      public Page<User> listWatchers(String owner, String repo, PageOptions options)
      列出订阅(Watch)了指定仓库的用户。

      API 端点: GET /repos/{owner}/{repo}/subscribers

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      options - 分页选项(可为 null),支持 per_page 和 page 参数
      Returns:
      订阅用户分页列表
    • getReadme

      public GithubResponse<Content> getReadme(String owner, String repo, String ref)
      获取仓库的 README 文件内容。

      API 端点: GET /repos/{owner}/{repo}/readme

      Parameters:
      owner - 仓库所有者的用户名
      repo - 仓库名称
      ref - 分支、标签或 commit SHA(可为 null,默认使用仓库的默认分支)
      Returns:
      README 文件的内容信息
    • getLicense

      public GithubResponse<License> getLicense(String license)
      获取指定许可证的详细信息。

      API 端点: GET /licenses/{license}

      Parameters:
      license - 许可证的 SPDX 标识符(如 "mit"、"apache-2.0")
      Returns:
      许可证详细信息
    • listCommonlyUsedLicenses

      public Page<License> listCommonlyUsedLicenses(ListLicensesOptions options)
      列出常用开源许可证。

      API 端点: GET /licenses

      Parameters:
      options - 查询选项(可为 null),支持 featured 参数筛选精选许可证
      Returns:
      许可证分页列表