0%

通过Github API导入和更新其他来源的仓库

Github提供了丰富的API供开发者使用(官方文档V3)。通过使用这些API,开发者可以通过编程实现各种需求。此篇文章主要介绍如何使用Github API进行身份认证,并通过Github API导入其他版本管理系统的仓库,例如码云Gitlab

身份验证

官方文档的OverView介绍了Github API进行身份验证的方法。这里有三种:

  1. 基础认证方法
  2. 基于OAuth2 token认证方法
  3. OAuth2 key/secret认证方法

官方推荐使用第二种OAuth2 token认证方法。并且官方将在2020.11.13后不再支持第三种认证方法。

基础认证方法

基于用户名和密码的验证方法。请求接口时输入GIthub上的用户名和密码进行用户身份验证。
官方给出的使用curl请求示例如下:

1
curl -u "username" https://api.github.com

使用Postman进行接口调试:
Postman
点击AuthorizationType选择Basic Auth,输入用户名和密码即可。

基于OAuth2 token认证方法

用户可以在Github上生成全网唯一的OAuth2 token,并且可以根据token用途的不同,设定每个token的权限。

生成token

Github网页右上角用户设置页面Settings->开发者设置页面 Developer Setting->personal access token->Generate New token->填写信息->页面最下方Generate token
用户设置页面入口
开发者设置页面
personal access token
Generate New token
token配置
Note处填写token对应的描述,方便后期管理。在下方选择该token对应的权限,本文只介绍导入其他库,因此全选repo的选项即可。选择完毕后点击Generate token。生成token只会显示一次,此处切记。以后任何方式都无法查看这个token值,如果忘记,只能删除重新创建。

使用token

生成的token直接添加到请求头中即可。
官方给出的使用curl请求示例如下,OAUTH-TOKEN替换为上面生成的token

1
curl -H "Authorization: token OAUTH-TOKEN" https://api.github.com

使用Postman 调试:

Headers中添加key为Authorization,对应的Value为token OAUTH-TOKENOAUTH-TOKEN替换为上面生成的token

导入其他库

github可以直接导入其他Git仓库,可以在网页上操作,也可以通过API来进行导入。
API如下,owner换成自己的Github用户名,import前的repo换成导入到github中的仓库名称,注意,使用API时,github中要先创建一个空的仓库用来导入。

开始一个导入

1
PUT /repos/:owner/:repo/import

请求时带的json数据如下:

1
2
3
4
5
6
{
"vcs": "subversion",
"vcs_url": "http://svn.mycompany.com/svn/myproject",
"vcs_username": "octocat",
"vcs_password": "secret"
}

参数简单说明(详见官方文档):

参数 含义
vcs 导入仓库使用的版本管理系统,可以为subversiongit
vcs_url 仓库地址
vcs_username 源仓库的用户名,如果源仓库时公开的,此处可以省略
vcs_password 源仓库的用户对应的密码,如果源仓库时公开的,此处可以省略

更新已经存在的仓库

如果已经导入了,又想保持仓库与源仓库同步,那么可以通过更新API实现对仓库的导入更新。

1
PATCH /repos/:owner/:repo/import

请求时带的json数据如下:

1
2
3
4
{
"vcs_username": "octocat",
"vcs_password": "secret"
}

参数含义如上。注意,如果此处没有这两个参数也是可以的。按照官方文档中的说法是,不传参时会重新导入。

还有其他例如查看导入状态的API等,详情可以参见官方文档

请作者喝咖啡