管理分支與提取要求

已完成

Azure Databricks 中的協作開發依賴有效的 版本控制實務。 當多名團隊成員同時處理筆記本和程式碼檔案時,你需要有結構的方法來隔離 變更、 審查程式碼並 整合工作 ,同時不中斷生產工作流程。

圖表展示了如何管理分支、拉取請求和衝突。

Azure Databricks 的 Git 資料夾提供一個可直接整合到你工作空間的視覺化 Git 客戶端。 此整合讓您能執行常見的 Git 操作——分支、提交與合併——而無需離開 Azure Databricks 環境。

建立與管理分支

功能分支 會讓你的工作與主程式碼庫隔離。 當你在 Azure Databricks 建立分支時,你可以獨立開發和測試變更,然後再合併成共享分支。

要建立新分支:

  1. 請選擇筆記本名稱旁的分支按鈕,開啟 Git 對話框。
  2. 選擇 建立分支 並輸入描述性名稱。
  3. 以適當的來源分支為基礎建立您的分支,通常是 main。

建立分支對話框的截圖。

使用一致的命名規則來清楚辨識分支工作。 常見的模式包括:

  • feature/feature-name 新功能
  • bugfix/issue-description 用於修正
  • users/username/description 用於個人開發工作

當你切換分支時,如果未提交的變更與現有程式碼不衝突,這些變更會被帶到新分支。 如果你不打算將更改帶到新分支, 在切換分支前先丟棄這些更改。

這很重要

切換分支時,如果新分支不包含某些資產,這些工作區資產可能會被刪除。 在切換前,請確認該資產是否存在於目標分支,尤其是你有分享或收藏過筆記本的話。

提交並推送變更

修改筆記本或檔案後,提交 變更 以建立分支歷史快照。 Git 資料夾的介面會標示修改過的檔案並顯示 視覺差異 ,讓你在提交前可以檢視變更。

若要提交並推送變更:

  1. 從筆記本或工作區瀏覽器開啟 Git 對話框。
  2. 請檢視對話框中已更改的檔案清單。
  3. 輸入一段描述性提交訊息,說明改變了什麼以及原因。
  4. 選擇提交 並推送 以儲存變更並與遠端儲存庫同步。

如果您沒有直接提交到受保護的分支(例如main)的權限,請先建立一個功能分支。 接著,您可以使用 Git 提供者的介面建立提取要求以進行合併。

備註

當筆記本使用 .py、.scala、.sql 或 .r 等原始檔格式時,預設不會在提交中包含筆記本輸出。 如果需要版本控制輸出,請使用 IPYNB 格式。

處理提取要求

提取要求可讓團隊成員在將變更合併至共用分支之前檢閱程式碼變更。 雖然 Azure Databricks 提供用於分支與提交的 Git 作業,但您會透過 Git 提供者的介面來建立與檢閱提取要求:GitHub、Azure DevOps、GitLab 或 Bitbucket。

典型的協作工作流程遵循以下步驟:

  1. 將儲存庫複製到你的 Azure Databricks 工作區。
  2. 從main建立一個功能分支。
  3. 修改筆記本和檔案。
  4. 提交並推送變更到遠端儲存庫。
  5. 打開你 Git 供應商的網站,建立一個拉取請求。
  6. 與團隊一起檢視程式碼並回應回饋。
  7. 將提取要求合併至部署分支。

Databricks 建議每位開發者各自負責自己的 分支 ,以減少衝突。 當貢獻者推送到同一個 Git 資料夾時,一個使用者切換分支會影響所有共用該資料夾的人。

在提取要求合併後,您可以透過拉取已更新的分支,將變更同步至本機工作區。

解決合併衝突

合併衝突發生在多個使用者修改同一行檔案時,Git 無法自動決定哪些變更要保留。 衝突可能在 拉取、 合併或 重新基制 操作中發生。

當發生衝突時,Git 資料夾的介面會顯示一系列衝突檔案並提供解決選項:

保留目前變更或接受傳入變更:當您確定要採用其中一方的所有變更時,請使用此方法。 選擇檔案旁的烤肉串選單,選擇 保留所有目前變更 或 「取所有新入更改」。

手動解決:遇到複雜衝突時,直接編輯檔案。 Git 會以標記標示發生衝突的區段:

<<<<<<< HEAD
Your current changes
=======
Incoming changes
>>>>>>> branch-name

移除標記並編輯內容以維持正確的程式碼。 完成後選擇 標記為已解決 。

解決所有衝突後,選擇 「繼續合併 」或 「繼續重新基底 」以完成操作。 如果你做了錯誤的選擇,請選擇 中止 取消並回到先前的狀態。

小提示

經常從遠端儲存庫拉取變更,以便及早發現衝突。 小且頻繁的合併比大型複雜合併更容易解決。

有了這些分支與衝突解決技能,你能有效參與團隊開發工作流程。 你的下一步是了解這些實務如何與更廣泛的 CI/CD 流程整合,以部署跨環境的程式碼。