如何使用 Python 创建新分支、推送文本文件并将合并请求发送到 gitlab 存储库?
How to create a new branch, push a text file and send merge request to a gitlab repository using Python?
我找到了
https://github.com/python-gitlab/python-gitlab,但我无法理解文档中的示例。
正在查看 python-gitlab
,我没有看到您要查找的某些内容。在这种情况下,我建议您将其分解并使用更基本的工具和库执行各个步骤。
前两部分不需要使用 Gitlab API 即可完成。您基本上可以使用 Python 使用 git.exe
对您的磁盘执行克隆、分支、编辑和提交调用。在某些方面,这更容易,因为您可以自己复制调用。你可以使用 GitPython.
我建议您通过其中一种方法来做到这一点,而不是尝试通过 Gitlab API 来做到这一点。如果您在本地(甚至在 CI 内)进行分支工作,则更容易理解、调试和调查。
将代码推送到分支后,您可以使用 Gitlab 的 API 通过 REST 创建合并请求(例如 requests
库)。创建 MR 的说明位于 https://docs.gitlab.com/ee/api/merge_requests.html#create-mr 并且大多数字段都是可选的,因此最小字段如下所示:
{
"id": "some-user%2Fsome-project",
"source_branch": "name_of_your_mr_branch",
"target_branch": "main",
"title": "Automated Merge Request..."
}
这是一个 authenticated POST 调用(创建)。在这些链接之间,您应该拥有执行此操作所需的大部分内容。
没错,我们在文档中找不到任何测试。这是您问题的基本答案。
如果您想要完整的工作脚本,我已将其附在此处:
https://github.com/gitshashwat/general_purpose_scripts/blob/main/usecase_gitlab_python.py
分解以下步骤:
为您创建一个授权密钥:按照此处的步骤操作:https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html
为您的项目创建一个 gitlab 服务器实例
server = gitlab.Gitlab('https://gitlab.example.com', private_token=YOUR_API_TOKEN)
project = server.projects.get(PROJECT_ID)
使用以下方法创建分支:
branch = project.branches.create(
{"branch": branch_name, "ref": project.default_branch}
)
使用以下方式上传文件:
project.files.create(
{
"file_path": file_name,
"branch": branch.name,
"content": "data to be written",
"encoding": "text", # or 'base64'; useful for binary files
"author_email": AUTHOR_EMAIL, # Optional
"author_name": AUTHOR_NAME, # Optional
"commit_message": "Create file",
}
)
使用以下方法创建合并请求:
project.mergerequests.create(
{
"source_branch": branch.name,
"target_branch": project.default_branch,
"title": "merge request title",
}
)
我找到了 https://github.com/python-gitlab/python-gitlab,但我无法理解文档中的示例。
正在查看 python-gitlab
,我没有看到您要查找的某些内容。在这种情况下,我建议您将其分解并使用更基本的工具和库执行各个步骤。
前两部分不需要使用 Gitlab API 即可完成。您基本上可以使用 Python 使用 git.exe
对您的磁盘执行克隆、分支、编辑和提交调用。在某些方面,这更容易,因为您可以自己复制调用。你可以使用 GitPython.
我建议您通过其中一种方法来做到这一点,而不是尝试通过 Gitlab API 来做到这一点。如果您在本地(甚至在 CI 内)进行分支工作,则更容易理解、调试和调查。
将代码推送到分支后,您可以使用 Gitlab 的 API 通过 REST 创建合并请求(例如 requests
库)。创建 MR 的说明位于 https://docs.gitlab.com/ee/api/merge_requests.html#create-mr 并且大多数字段都是可选的,因此最小字段如下所示:
{
"id": "some-user%2Fsome-project",
"source_branch": "name_of_your_mr_branch",
"target_branch": "main",
"title": "Automated Merge Request..."
}
这是一个 authenticated POST 调用(创建)。在这些链接之间,您应该拥有执行此操作所需的大部分内容。
没错,我们在文档中找不到任何测试。这是您问题的基本答案。
如果您想要完整的工作脚本,我已将其附在此处: https://github.com/gitshashwat/general_purpose_scripts/blob/main/usecase_gitlab_python.py
分解以下步骤:
为您创建一个授权密钥:按照此处的步骤操作:https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html
为您的项目创建一个 gitlab 服务器实例
server = gitlab.Gitlab('https://gitlab.example.com', private_token=YOUR_API_TOKEN)
project = server.projects.get(PROJECT_ID)
使用以下方法创建分支:
branch = project.branches.create(
{"branch": branch_name, "ref": project.default_branch}
)
使用以下方式上传文件:
project.files.create(
{
"file_path": file_name,
"branch": branch.name,
"content": "data to be written",
"encoding": "text", # or 'base64'; useful for binary files
"author_email": AUTHOR_EMAIL, # Optional
"author_name": AUTHOR_NAME, # Optional
"commit_message": "Create file",
}
)
使用以下方法创建合并请求:
project.mergerequests.create(
{
"source_branch": branch.name,
"target_branch": project.default_branch,
"title": "merge request title",
}
)