如何通过GitHub API基于私有模板仓库创建新代码仓库
基于私有模板仓库自动化创建R项目实现方案
不用第三方GitHub App,GitHub官方原生支持从模板仓库生成新仓库的API,直接用你已经在用的gh包就能调用,完全可以集成到自定义的new_manuscript()函数里,不需要额外引入工具。
前置准备
先把你存Rmarkdown模板的私有仓库设置为模板仓库:打开对应仓库的Settings页面,在General分类最下方找到「Template repository」选项,勾选开启即可,私有仓库开启模板功能后只有你自己(和你授权的组织成员)能用来生成新项目。
核心API调用代码
你之前用的POST /user/repos是普通创建空仓库的接口,本来就不支持传模板参数,要从模板生成仓库需要用专用接口POST /repos/{template_owner}/{template_repo}/generate,用gh包调用的示例如下:
gh::gh( "POST /repos/你的GitHub账号名/你的模板仓库名/generate", name = "test", # 新仓库的名称 private = TRUE, # 设为私有仓库 description = "新Rmarkdown稿件项目", # 可选,填仓库描述 owner = NULL, # 可选,要把新仓库建在组织下就填组织名,默认建在个人账号下 include_all_branches = FALSE # 可选,是否拷贝模板全部分支,默认仅拷贝默认分支 )
函数集成建议
- 首次使用前让用户通过
gh::gh_auth()完成GitHub身份认证,token会自动存在本地环境变量,后续调用不需要重复登录 - 可以把你常用的几个私有模板的信息(比如稿件模板、数据分析模板、报告模板对应的仓库名)做成R包内置配置,用户调用
new_manuscript()时只需要传项目名、选模板类型,不需要手动输入仓库全名 - 远程仓库创建完成后,可以搭配
usethis包的函数自动把仓库克隆到本地、打开RStudio项目,走完整个初始化流程:
# 远程仓库创建完成后自动拉取到本地 usethis::create_from_github( repo = "你的GitHub账号名/test", destdir = "你本地存放项目的根目录路径", open = TRUE # 创建完成后自动打开新项目 )
关于createstructure的说明
这类第三方App需要你额外开放仓库权限,私有仓库场景下权限要求很高,存在数据安全隐患,且官方API已经能完全满足需求,不建议使用。
内容的提问来源于stack exchange,提问作者Dylan Russell
相关产品推荐
相关产品推荐

