使用 GitLab API 获取用户的提交列表
Get list of commits by user with the GitLab API
我可以使用此命令成功访问有关用户的信息:
curl http://gitlab.$INTERNAL_SERVER.com/api/v3/\
users/$USER_ID\?private_token\=$GITLAB_TOKEN
但是,我找不到 API 端点来获取用户已推送到 GitLab 服务器的提交列表。是否存在包含此信息的 URL?
据我所知,这样的 API 端点不存在。基本上我能想出的最好的流程是:
- 找到用户参与的所有项目(本身不是100%简单的)
- 然后获取该项目的提交
- 然后根据用户邮箱过滤那些提交。
我正在使用 java-gitlab-api 访问 Gitlab 服务器,所以手边没有 curl 样本(抱歉!)。
您似乎可以使用事件端点获取提交列表
data = requests.get(host + "/api/v4/users/{id}/events".format(id=user_id),
params={"action": "pushed"})
您可以通过将 params
更新为
来链接它
params.update({"before": before_date})
其中 before date
可以是数据中的最后一个元素,您可以不断循环以获取用户从特定日期开始的所有提交
我写了一个 Python 脚本来执行@demaniak 的建议。享受
import requests
import ujson as json
header ={...}
def get_all_commits_gitlab(project_id, username):
json_loads_of_commit = []
f_date = "2022-01-01T00:00:42.000+01:00"
params = {"until": f_date}
url_p = "https://gitlab.xxx.xx/api/v4/projects/%d/\
repository/commits" % project_id
r = requests.get(url_p, params, headers=header)
c = 0
while r.status_code == 200:
jsLoad = json.loads(r.content)
newDate = jsLoad[-1]["committed_date"]
if (params["until"] == newDate):
break
user_commits = []
for cm in jsLoad:
if cm["author_name"] == username:
user_commits.append(cm)
c += 1
json_loads_of_commit.append(user_commits)
params["until"] = newDate
r = requests.get(url_p, params, headers=header)
print("project %d: %d commits by user %s, \
the first one %s" % (project_id, c, username, newDate))
return json_loads_of_commit
我可以使用此命令成功访问有关用户的信息:
curl http://gitlab.$INTERNAL_SERVER.com/api/v3/\
users/$USER_ID\?private_token\=$GITLAB_TOKEN
但是,我找不到 API 端点来获取用户已推送到 GitLab 服务器的提交列表。是否存在包含此信息的 URL?
据我所知,这样的 API 端点不存在。基本上我能想出的最好的流程是:
- 找到用户参与的所有项目(本身不是100%简单的)
- 然后获取该项目的提交
- 然后根据用户邮箱过滤那些提交。
我正在使用 java-gitlab-api 访问 Gitlab 服务器,所以手边没有 curl 样本(抱歉!)。
您似乎可以使用事件端点获取提交列表
data = requests.get(host + "/api/v4/users/{id}/events".format(id=user_id),
params={"action": "pushed"})
您可以通过将 params
更新为
params.update({"before": before_date})
其中 before date
可以是数据中的最后一个元素,您可以不断循环以获取用户从特定日期开始的所有提交
我写了一个 Python 脚本来执行@demaniak 的建议。享受
import requests
import ujson as json
header ={...}
def get_all_commits_gitlab(project_id, username):
json_loads_of_commit = []
f_date = "2022-01-01T00:00:42.000+01:00"
params = {"until": f_date}
url_p = "https://gitlab.xxx.xx/api/v4/projects/%d/\
repository/commits" % project_id
r = requests.get(url_p, params, headers=header)
c = 0
while r.status_code == 200:
jsLoad = json.loads(r.content)
newDate = jsLoad[-1]["committed_date"]
if (params["until"] == newDate):
break
user_commits = []
for cm in jsLoad:
if cm["author_name"] == username:
user_commits.append(cm)
c += 1
json_loads_of_commit.append(user_commits)
params["until"] = newDate
r = requests.get(url_p, params, headers=header)
print("project %d: %d commits by user %s, \
the first one %s" % (project_id, c, username, newDate))
return json_loads_of_commit