
如何使用 JS 查看 GitLab 上的整个提交列
在日常开发或自动化运维中,我们经常需要通过脚本获取 GitLab 仓库的提交记录。GitLab 提供了强大的 RESTful API,但默认情况下 API 会进行分页处理,单次请求最多只能返回 100 条记录。如果想要获取整个项目的提交历史,我们需要借助 JavaScript 处理分页逻辑,循环获取所有数据。
核心思路:
1. 调用 GitLab 的 Commits API。
2. 设置每页返回的最大记录数(per_page=100)。
3. 通过递增 page 参数循环请求,直到返回的提交数组为空。
代码实现:
async function getAllGitLabCommits(projectId, privateToken) {
const baseUrl = `https://www.ipipp.com/api/v4/projects/${projectId}/repository/commits`;
let allCommits = [];
let page = 1;
const perPage = 100;
while (true) {
const url = `${baseUrl}?per_page=${perPage}&page=${page}`;
const response = await fetch(url, {
method: 'GET',
headers: {
'PRIVATE-TOKEN': privateToken
}
});
if (!response.ok) {
console.error(`请求失败,状态码: ${response.status}`);
break;
}
const commits = await response.json();
// 如果返回为空数组,说明已经没有更多提交了
if (commits.length === 0) {
break;
}
allCommits = allCommits.concat(commits);
page++;
}
return allCommits;
}
// 使用示例
const projectId = 'your_project_id'; // 可以是数字ID或 URL编码后的路径
const token = 'your_access_token';
getAllGitLabCommits(projectId, token)
.then(commits => {
console.log(`总共获取到 ${commits.length} 条提交记录`);
})
.catch(error => {
console.error('获取提交记录时出错:', error);
});参数解析:
projectId:项目的 ID。如果是路径形式(如 group/project),需要使用 encodeURIComponent 进行 URL 编码(变为 group%2Fproject)。
privateToken:你的 GitLab 个人访问令牌,需要有该仓库的读取权限。
perPage:GitLab API 允许的最大分页值为 100,设置为 100 可以减少网络请求次数,提高效率。
注意事项:
对于拥有极长提交历史的大型仓库,一次性拉取所有提交可能会消耗大量内存和时间。在实际应用中,建议根据业务需求(例如只获取近半年的提交)添加 since 和 until 参数来限制时间范围,避免不必要的性能开销。此外,如果仓库提交量极大,建议在代码中加入并发控制或延时逻辑,以免触发 GitLab 的 API 速率限制。