📅  最后修改于: 2023-12-03 14:57:26.629000             🧑  作者: Mango
如果您是一名开发者,那么 Github 是必须用到的代码托管平台之一。在 Github 上提交代码是每个开发者必须掌握的技能。而在公司里工作时,经常需要计算团队成员在某个时间段内提交的代码量,来衡量团队成员的生产力。
在这个教程中,我们将会介绍如何使用 Shell/Bash 来计算 Github 提交数量。我们将会使用 Github 提供的 API 来获取用户的提交记录,然后对记录进行分析和计算。
在使用 Github API 之前,我们需要先获得 Github API 的访问令牌。在您的 Github 账户中创建一个新的令牌,然后将其保存在您的环境变量中。
export GITHUB_TOKEN=xxxxxxxxxxxxxx
在 Shell/Bash 中,我们可以使用 curl 命令来调用 Github API。Github API 的提交记录信息可以通过以下方式获取:
curl -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/:owner/:repo/commits?author=:username&since=:start_date&until=:end_date"
| 参数 | 描述 | | --- | --- | | :owner | Github 仓库所有者的用户名 | | :repo | Github 仓库的名称 | | :username | 提交记录的作者用户名 | | :start_date | 开始日期(格式为 ISO 8601 格式,例如:2020-01-01T00:00:00Z) | | :end_date | 结束日期(格式为 ISO 8601 格式,例如:2020-01-31T23:59:59Z) |
该命令将获取指定作者在指定时间段内提交的所有记录。Github API 返回的是一个包含 json 数据的数组,每个记录都具有类似于以下的结构:
{
"sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e",
"commit": {
"author": {
"name": "Monalisa Octocat",
"email": "support@github.com",
"date": "2011-04-14T16:00:49Z"
},
"message": "Fix all the bugs",
"tree": {
"sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e",
"url": "https://api.github.com/repos/octocat/Hello-World/git/trees/6dcb09b5b57875f334f61aebed695e2e4193db5e"
},
// ...
},
"author": {
"login": "octocat",
"id": 1,
// ...
},
// ...
}
我们可以使用 jq 工具来解析 json 数据,例如:
curl -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/:owner/:repo/commits?author=:username&since=:start_date&until=:end_date" \
| jq -r '.[].sha'
该命令将列出指定作者在指定时间段内提交的所有记录的 sha 代码。
我们可以编写一个脚本来统计特定用户在指定时间范围内的提交数量:
#!/bin/bash
OWNER=<Your Github User Name>
REPO=<Your Github Repo Name>
USERNAME=<Github Username>
START_DATE="2020-01-01T00:00:00Z"
END_DATE="2020-01-31T23:59:59Z"
sha_list=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/$OWNER/$REPO/commits?author=$USERNAME&since=$START_DATE&until=$END_DATE" \
| jq -r '.[].sha'
)
count=0
for sha in $sha_list
do
count=$(( count + 1 ))
done
echo "Total commits by $USERNAME between $START_DATE and $END_DATE: $count"
该脚本将计算指定用户在指定时间段内的提交数量,并输出结果。
以下是一个示例文本以 Markdown 格式展示:
# 计算 Github 提交 - Shell/Bash
如果您是一名开发者,那么 Github 是必须用到的代码托管平台之一。在 Github 上提交代码是每个开发者必须掌握的技能。而在公司里工作时,经常需要计算团队成员在某个时间段内提交的代码量,来衡量团队成员的生产力。
## Github API 认证
在使用 Github API 之前,我们需要先获得 Github API 的访问令牌。在您的 Github 账户中创建一个新的令牌,然后将其保存在您的环境变量中。
```bash
export GITHUB_TOKEN=xxxxxxxxxxxxxx
在 Shell/Bash 中,我们可以使用 curl 命令来调用 Github API。Github API 的提交记录信息可以通过以下方式获取:
curl -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/:owner/:repo/commits?author=:username&since=:start_date&until=:end_date"
| 参数 | 描述 | | --- | --- | | :owner | Github 仓库所有者的用户名 | | :repo | Github 仓库的名称 | | :username | 提交记录的作者用户名 | | :start_date | 开始日期(格式为 ISO 8601 格式,例如:2020-01-01T00:00:00Z) | | :end_date | 结束日期(格式为 ISO 8601 格式,例如:2020-01-31T23:59:59Z) |
该命令将获取指定作者在指定时间段内提交的所有记录。Github API 返回的是一个包含 json 数据的数组,每个记录都具有类似于以下的结构:
{
"sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e",
"commit": {
"author": {
"name": "Monalisa Octocat",
"email": "support@github.com",
"date": "2011-04-14T16:00:49Z"
},
"message": "Fix all the bugs",
"tree": {
"sha": "6dcb09b5b57875f334f61aebed695e2e4193db5e",
"url": "https://api.github.com/repos/octocat/Hello-World/git/trees/6dcb09b5b57875f334f61aebed695e2e4193db5e"
},
// ...
},
"author": {
"login": "octocat",
"id": 1,
// ...
},
// ...
}
我们可以使用 jq 工具来解析 json 数据,例如:
curl -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/:owner/:repo/commits?author=:username&since=:start_date&until=:end_date" \
| jq -r '.[].sha'
该命令将列出指定作者在指定时间段内提交的所有记录的 sha 代码。
我们可以编写一个脚本来统计特定用户在指定时间范围内的提交数量:
#!/bin/bash
OWNER=<Your Github User Name>
REPO=<Your Github Repo Name>
USERNAME=<Github Username>
START_DATE="2020-01-01T00:00:00Z"
END_DATE="2020-01-31T23:59:59Z"
sha_list=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/$OWNER/$REPO/commits?author=$USERNAME&since=$START_DATE&until=$END_DATE" \
| jq -r '.[].sha'
)
count=0
for sha in $sha_list
do
count=$(( count + 1 ))
done
echo "Total commits by $USERNAME between $START_DATE and $END_DATE: $count"
该脚本将计算指定用户在指定时间段内的提交数量,并输出结果。