使用R语言gh包更新GitHub仓库描述与主题失败求助
问题诊断与修复方案
一、更新主题函数的核心错误
GitHub仓库主题的更新接口/repos/:owner/:repo/topics必须使用PUT请求方法,你当前的函数没有指定method = "PUT",默认会发送GET请求——这只会读取当前主题,不会执行更新操作。另外,API要求names参数是数组类型,单个标签也要用向量传入。
修改后的主题更新函数:
write_topics <- function(repo, org, pat, topics) { gh::gh( "/repos/:owner/:repo/topics", method = "PUT", # 必须添加PUT方法 owner = org, repo = repo, .token = pat, names = as.vector(topics) # 确保是向量/数组类型 ) }
调用示例(注意topics用向量传入):
write_topics(repo = "TestTargets", org = "derek-corcoran-barrios", pat = "MY-PAT", topics = c("biodiversity"))
二、更新描述函数的可能问题
1. PAT权限不足
你的个人访问令牌(PAT)必须拥有repo权限(针对私有仓库)或public_repo权限(针对公开仓库)。如果权限不够,API会返回200状态码但不会修改仓库信息。可以在GitHub的PAT设置页面检查权限。
2. 显式指定请求体(可选)
虽然gh包会自动将参数转为请求体,但有时显式构造body能避免参数传递问题,修改后的函数:
write_description <- function(repo, org, pat, description) { gh::gh( "/repos/:owner/:repo", method = "PUT", owner = org, repo = repo, .token = pat, body = list(description = description) # 显式传入请求体 ) }
3. 调试请求详情
添加.verbose = TRUE参数可以查看完整的请求和响应信息,帮助定位问题:
write_description(repo = "TestTargets", org = "derek-corcoran-barrios", pat = "MY-PAT", description = "Testing the targets package", .verbose = TRUE)
额外注意事项
- 确保仓库名称和组织名称拼写完全正确,大小写敏感。
- 私有仓库的操作需要PAT拥有完整的
repo权限,公开仓库至少需要public_repo权限。
内容的提问来源于stack exchange,提问作者Derek Corcoran
相关产品推荐
相关产品推荐

