Pull Request 的生命週期#

如先前所述,Arrow 專案使用 Git 進行版本控制,並採用基於 Pull Request 的工作流程。這表示您透過在 Git 中建立分支來貢獻程式碼的變更或「修補程式」,對程式碼進行變更,將變更推送到您的 origin(即您在 GitHub 上的 Arrow 儲存庫分支),然後針對官方 Arrow 儲存庫(在您的設定中儲存為 upstream)建立一個 Pull Request

您現在應該已經設定好 Git,複製了儲存庫,成功建置了 Arrow,並且有一個 GitHub 議題要處理。

在變更程式碼之前,您應該在 Git 中建立一個新的分支。

  1. 使用 upstream/main 更新您的 fork 的 main 分支。從 arrow 目錄在 shell 中執行此操作。

    $ git checkout main # select the main Arrow branch
    $ git fetch upstream # check for changes in upstream/main
    $ git pull --ff-only upstream main # save the changes from upstream/main
    

    注意:--ff-only 僅在可以快速轉發變更而不會發生衝突或建立合併提交時才應用變更。

  2. 建立新分支

    $ git checkout -b <branch-name>
    

    或 (作用相同)

    $ git switch --create <branch-name>
    

現在您可以變更程式碼。若要查看在函式庫中所做的變更,請使用以下兩個命令

$ git status # to see what files are changed
$ git diff # to see code change per file

建立 Pull Request#

一旦您對變更感到滿意,請執行 測試程式碼風格檢查器,然後繼續提交變更。

  1. 新增並提交變更

    $ git add <filenames>
    $ git commit -m "<message>"
    

    或者,如果所有變更的檔案都要提交,您可以一步完成新增和提交 (-a 新增全部,-m 訊息)

    $ git commit -am "<message>"
    
  2. 然後將您的工作推送到您的 Arrow 分支

    $ git push origin <branch-name>
    

注意

您的工作現在仍在您的監控之下,因此如果您看到任何想要更正的錯誤,這不是問題。您可以進行額外的提交來更正,而且 Git 有許多方法可以修改、刪除、修訂等等。請參閱 https://git.dev.org.tw/docs 以取得更多資訊。

在您建立 Pull Request 之前,Arrow 儲存庫上不會顯示任何內容,您可以自由實驗。

如果一切都設定好了,您可以建立 Pull Request!

  1. 前往 https://github.com/<您的使用者名稱>/arrow,您將看到一個方框,其中包含您推送的分支名稱,旁邊有一個綠色的 Compare & pull request 按鈕。點擊後,您應該新增 Pull Request 的標題和描述。在下方,您可以再次檢查您所做的變更。

    另請參閱

    在 Arrow 儲存庫中命名 Pull Request 的更多詳細資訊和其他額外資訊,請參閱 Pull Request 和審查 章節。

持續整合 (CI)#

持續整合 (CI) 是一種自動化的方式,可以使用特定 Pull Request 所做的變更程式碼在不同的環境中執行測試和建置。它在合併或整合到專案的主要儲存庫之前,作為穩定性檢查。

一旦建立 Pull Request,CI 將觸發程式碼檢查。根據變更的程式碼部分(例如文件、C++ 或其他語言),CI 會配置為執行相關的檢查。

您將在 GitHub 上 Pull Request 頁面的底部看到正在執行的檢查。如果發生錯誤,請點擊詳細資訊並研究建置失敗的原因。

CI window showing the status of the code checks in case of changes made to the documentation.

CI 檢查文件變更。#

CI window showing the status of the code checks in case of changes made to the python files

CI 檢查 python 檔案變更。#

CI window showing the status of the code checks in case of changes made to the R files.

CI 檢查 R 檔案變更。#

除了檢查 GitHub 儲存庫中變更的 CI 作業(開啟或合併 Pull Request)之外,我們還將 CI 用於 Apache Arrow 函式庫的夜間建置和發布。

此外,擴展的觸發作業可以用於您的 Pull Request,例如新增帶有 @github-actions crossbow submit python 的評論將透過 GitHub Actions 執行 PyArrow 測試。這些主要用於在不太常見的環境中執行測試,並且通常在首次貢獻中不需要。

若要閱讀更多關於此主題的資訊,請造訪 持續整合

Pull Request 的審查與合併#

當 Pull Request 提交後,它會等待審查。開源最棒的事情之一是您的工作可以獲得大量的回饋,因此它會變得更完善。不要因為審查和更正而導致 PR 合併所需的時間而感到沮喪。這是一個支持品質的過程,透過這個過程您可以學到很多東西。

如果合併仍然需要太長時間,請不要猶豫在 Pull Request 的評論區提醒維護者,並在 GitHub 議題上發布提醒。

如何讓您的 Pull Request 獲得審查?#

當 Pull Request 建立時,Arrow 維護者將收到通知,他們會盡快處理。如果幾天過去了,但仍然沒有被審查,請繼續提及 GitHub 議題的報告者或您透過郵件列表或 GitHub 溝通的開發人員。

若要在 GitHub 中加入 **提及**,請在評論中插入 @ 並從列表中選擇使用者名稱。

評論 Pull Request#

當 Pull Request 在儲存庫中開啟時,您和其他開發人員可以評論提出的解決方案。

若要建立一般評論,請導覽至 Pull Request 的 **Conversation** 標籤,並開始在頁面底部的評論框中寫作。

您也可以評論檔案的某個部分,以指出程式碼中的特定內容。若要執行此操作,請導覽至 **Files changed** 標籤,並選擇您要插入評論的行。將滑鼠懸停在行首時,您將看到一個藍色的加號圖示。您可以點擊它或拖曳它以選擇多行,然後點擊圖示以插入評論。

解決對話#

您可以透過點擊 **Files changed** 標籤中的 **Resolve conversation** 來解決 Pull Request 審查中的對話。這樣,對話將會折疊並標記為已解決,這將使您更容易組織已完成和仍需要處理的事項。

更新您的 Pull Request#

收到審查後的程序與建立初始 Pull Request 類似。您需要在本地更新您的程式碼,進行提交,更新分支以使其與 upstream 同步,並將您的程式碼推送到 origin。它也會自動在您的 Pull Request 中更新。

更新 Pull Request 的步驟如下

  1. 在本地更新程式碼並像以前一樣進行提交

    $ git commit -am "<message>" #if all changed files are to be committed
    
  2. 重要! 如果 Pull Request 分支上有其他開發人員的提交,或者您提交了來自 GitHub 的建議,您需要在變基之前使用 origin 更新您的程式碼!若要執行此操作,請執行

    $ git pull origin <branch-name>
    

    在這裡,我們將新提交與我們的本地分支合併,而我們不進行變基。

  3. 現在我們必須更新分支以與 upstream main Arrow 分支同步。這樣 Pull Request 才能被合併。在這種情況下,我們使用變基。

    $ git pull upstream main --rebase
    

    這將在 upstream/main 的頂端重新設定您的本地提交的基準。

  4. 現在您可以透過執行以下命令推送變更

    $ git push origin <branch-name> --force
    

    關於強制推送到正在審查的分支的注意事項:如果您希望審查者查看您的更新,請確保您在 GitHub 上的 PR 上發表評論,因為僅僅強制推送不會在 GitHub 使用者介面中觸發通知。

另請參閱

本地 git 慣例 中查看更多關於更新分支(我們使用 變基,而不是 合併)和壓縮本地提交的資訊。

如果審查過程順利,您的 Pull Request 將被合併。

恭喜! 🎉#