簡體   English   中英

如何使用 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 ,但我無法理解文檔中的示例。

沒錯,我們在文檔中找不到任何測試。 這是您問題的基本答案。

如果您想要一個完整的工作腳本,我已將其附在此處: https://github.com/gitshashwat/general_ purpose_scripts/blob/main/usecase_gitlab_python.py

分解以下步驟:

為您創建 authkey:按照此處的步驟操作: https://docs.gitlab.com/ee/user/profile/personal_access_tokens.ZFC35FDC70D5FC69D269883A822C7A

創建項目的 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",
    }
)

查看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..."
}

這是一個經過身份驗證的 POST 調用(創建)。 在這些鏈接之間,您應該擁有執行此操作所需的大部分內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM