在 Databricks Repos 上运行 Git 操作

本文介绍如何克隆 Git 存储库以及对 Databricks Repos 执行其他常见 Git 操作。 Databricks Repos 是一个可视 Git 客户端,它与 Databricks 用户界面集成,并提供对连接的存储库的访问权限,它们在工作区中表示为 Git 文件夹。

Databricks Repos 最佳做法

Databricks Repos(Git 文件夹)实际上充当工作区中嵌入式的 Git 客户端。 若要提高团队协作效率,请为每个在自己的开发分支工作的用户使用映射到远程 Git 存储库的单独 Databricks Git 文件夹。 尽管多个用户可以向 Git 文件夹贡献内容,但只有一个指定用户应执行拉取、推送、提交和分支切换等 Git 操作。 如果多个用户对 Git 文件夹执行 Git 操作,可能会难以进行分支管理且容易出错,例如在用户切换某个分支并意外地为该文件夹的所有其他用户切换该分支时。

克隆连接到远程存储库的存储库

  1. 在边栏中,选择“工作区”>“存储库”。

  2. 单击“添加存储库”。

    “添加存储库”UI。

  3. 在“添加存储库”对话框中,选择“通过克隆 Git 存储库创建存储库”,然后输入存储库 URL。

  4. 从下拉菜单中选择 Git 提供程序,选择性地更改要用于 Databricks 存储库的名称,然后单击“创建存储库”。 远程存储库的内容会克隆到 Databricks 存储库。

    “从存储库克隆”UI。

在此阶段,可以选择使用稀疏签出来仅克隆存储库的一部分目录。 如果存储库大于 Databricks 支持的上限,此功能就非常有用

重要

目前,无法使用 Git CLI 在存储库中执行 Git 操作。 如果通过群集的 Web 终端使用 CLI 克隆 Git 存储库,则文件不会显示在 Azure Databricks UI 中。

访问 Git 对话框

可以从笔记本或 Databricks Repos 浏览器访问 Git 对话框。

  • 在笔记本中,单击标识了当前 Git 分支的笔记本名称旁边的按钮。

    笔记本上的 Git 对话框按钮。

  • 在 Databricks Repos 浏览器中,单击存储库名称右侧的按钮。 还可以右键单击存储库名称并从菜单中选择“Git…”。

    存储库浏览中的 Git 对话框按钮和 Git 菜单。

创建新分支

可以从 Git 对话框中基于现有分支创建新分支:

Git 对话框新建分支。

切换到其他分支

可以使用 Git 对话框中的分支下拉菜单切换到(签出)其他分支:

Git 对话切换到另一分支

重要

  • 在 Databricks 存储库中签出后,如果在远程存储库上删除了分支,则本地版本最多可以保留在关联的 Git 文件夹中长达 7 天。 无法删除 Databricks 中的本地分支,因此,如果必须移除它们,则必须删除并重新克隆存储库。

提交更改并将其推送到远程 Git 存储库

添加了新笔记本或文件,或是对现有笔记本或文件进行更改后,Repos UI 会突出显示更改。

突出显示了更改的 Git 对话框。

针对更改添加所需的提交消息,然后单击“提交并推送”将这些更改推送到远程 Git 存储库。

如果你无权提交到默认分支(如 main 分支),请创建新分支,并使用你的 Git 提供程序接口创建一个拉取请求 (PR) 以将其合并到默认分支。

注意

  • 默认情况下,当笔记本以源文件格式(.py.scala.sql.r)保存时,提交中不会包含笔记本输出。 有关使用 IPYNB 格式提交笔记本输出的信息,请参阅控制 IPYNB 笔记本输出项目提交

从远程 Git 存储库中拉取更改

若要从远程 Git 存储库中拉取更改,请在 Git 对话框中单击 拉取。 笔记本和其他文件会自动更新为远程 Git 存储库中的最新版本。 如果从远程存储库提取的更改与 Databricks 中的本地更改冲突,则需要解决合并冲突

重要

合并分支

Databricks Repos 中的合并功能使用 git merge 将一个分支合并到另一个分支中。 合并操作是将提交历史记录从一个分支合并到另一个分支的方法,唯一的区别在于它用于实现此目的的策略。 对于 Git 初学者,我们建议使用合并(而不是变基),因为它不需要强制推送到分支,因此不会重写提交历史记录。

若要详细了解合并与变基提交之间的差异,请参阅 Atlassian 关于该主题的文档

  • 如果存在合并冲突,请在 Repos UI 中解决它。
  • 如果未发生冲突,则会使用 git push 将合并推送到远程 Git 存储库。

在一个分支上为另一个分支Rebase

变基会改变分支的提交历史记录。 与 git merge 一样,git rebase 将一个分支的更改集成到另一个分支。 变基执行以下操作:

  1. 将当前分支的提交保存到临时区域。
  2. 将当前分支重置为所选分支。
  3. 重新应用先前保存在当前分支上的每个提交,从而生成结合了两个分支中的更改的线性历史记录。

有关变基的深入介绍,请参阅 git rebase

警告

使用变基可能会导致同一存储库中的协作者遇到版本控制问题。

一个常见工作流是在主分支上为某个特征分支变基。

若要在一个分支上为另一个分支变基,请执行以下操作:

  1. 在 Repos UI 中的“分支”菜单中,选择要变基的分支。

  2. 在串形菜单中选择“变基”。

    串形菜单中的 Git rebase 函数。

  3. 选择要在其上变基的分支。

    变基操作会将此处所选分支中的更改集成到当前分支中。

Databricks Repos 可运行 git commitgit push --force 来更新远程 Git 存储库。

解决合并冲突

当 2 个或更多 Git 用户尝试将对文件中相同行的更改合并到公共分支中时,会发生合并冲突,Git 无法选择要应用的“正确”更改。 当某个用户尝试将另一个分支中的更改拉取或合并到具有未提交的更改的分支时,也可能发生合并冲突。

动态 GIF,显示 Git 拉取期间未提交的更改导致的常见合并冲突

如果拉取、变基或合并等操作导致合并冲突,Repos UI 会显示一个文件列表,其中列出了冲突以及用于解决冲突的选项。

有两个主要选项:

  • 使用 Repos UI 解决冲突。
  • 中止 Git 操作,手动丢弃有冲突文件中的更改,然后重试 Git 操作。

动态 GIF,显示 Databricks Repos 文件夹 UI 中的合并冲突

使用 Repos UI 解决合并冲突时,必须选择在编辑器中手动解决冲突或保留所有传入或当前更改。

保留所有当前接受传入更改

如果你想保留所有当前更改或传入更改,请单击笔记本窗格中文件名右侧的垂直三点图标,然后选择“保留所有当前更改”或“接受所有传入更改”。 单击具有相同标签的按钮以提交更改并解决冲突。

Databricks 笔记本 UI 窗格,显示用于解决合并冲突的下拉列表选项

提示

对选择哪个选项感到困惑? 每个选项的颜色与它将在文件中保留的相应代码更改相匹配。

手动解决冲突

通过手动的冲突解决,可以确定合并中应接受哪些冲突行。 对于合并冲突,可以通过直接编辑包含冲突的文件的内容来解决冲突。

显示手动解决合并冲突的动态 GIF

要解决冲突,请选择要保留的代码行并删除所有其他代码行,包括 Git 合并冲突标记。 完成后,选择“标记为已解决”。

如果你觉得你在解决合并冲突时做出了错误选择,请单击“中止”按钮中止进程并撤消所有操作。 解决所有冲突后,单击“继续合并”或“继续变基”选项以解决冲突并完成操作。

Git reset

在 Databricks Repos 中,可以在 Azure Databricks UI 中执行 Git reset。 Databricks Repos 中的 Git reset 等效于结合使用 git reset --hardgit push --force

Git reset 将分支内容和历史记录替换为另一个分支的最新状态。 当编辑内容与上游分支冲突时,你可以使用此函数,并且无需担心在重置为上游分支时丢失这些编辑内容。 详细了解 Git reset -hard

重置为上游(远程)分支

在这种情况下使用 git reset

  • 将所选分支(例如 feature_a)重置为其他分支(例如 main)。
  • 此外,将上游(远程)分支 feature_a 重置为主分支。

重要

重置时,会丢失分支本地版本和远程版本中所有未提交和已提交的更改。

若要将分支重置为远程分支,请执行以下操作:

  1. 在 Repos UI 的“分支”菜单中,选择要重置的分支。

    Repos UI 中的分支选择器。

  2. 从串形菜单中选择“重置”。

    串形菜单中的 Git 重置操作。

  3. 选择要重置的分支。

    Git reset --hard 对话框。

配置稀疏签出模式

稀疏签出是一项客户端设置,可用于在 Databricks 中仅克隆并使用远程存储库的一部分目录。 如果你的存储库大小超出了 Databricks 支持的限制,则此模式特别有用。

添加(克隆)新存储库时,可以使用稀疏签出模式。

  1. 在“添加存储库”对话框中,打开“高级”。

  2. 选择“稀疏签出模式”。

    “添加存储库”对话框中的稀疏签出选项。

  3. 在“锥形模式”框中,指定所需的锥形签出模式。 用换行符分隔多个模式。

目前,无法在 Azure Databricks 中为存储库禁用稀疏签出。

锥形模式的工作原理

若要了解锥形模式在稀疏签出模式下的工作原理,请参阅以下表示远程存储库结构的示意图。

未启用稀疏签出的远程存储库结构。

如果选择了“稀疏签出模式”但未指定锥形模式,则会应用默认的锥形模式。 默认模式仅包含根目录中的文件,而不包含子目录中的文件,因而会导致如下所示的存储库结构:

稀疏签出:默认锥形模式。

将稀疏签出锥形模式设置为 parent/child/grandchild 会导致以递归方式包含 grandchild 目录的所有内容。 此外,还会包含 /parent/parent/child 和根目录中的文件(但不包含其子目录中的文件)。 参阅以下示意图中的目录结构:

稀疏签出:指定父-孙-子文件夹锥形模式。

可以添加多个以换行符分隔的模式。

注意

Git 锥形模式语法不支持排除行为 (!)。

修改稀疏签出设置

创建存储库后,可以从“设置”>“高级”>“锥形模式”编辑稀疏签出锥形模式。

注意以下行为:

  • 如果没有未提交的更改,从锥形模式中删除某个文件夹会将其从 Databricks 中删除。

  • 通过编辑稀疏签出锥形模式添加某个文件夹会将其添加到 Databricks,而无需执行额外的拉取。

  • 当文件夹中有未提交的更改时,无法通过更改稀疏签出模式来删除该文件夹。

    例如,某个用户编辑了文件夹中的某个文件但未提交更改。 然后,她尝试更改稀疏签出模式以便不包含此文件夹。 在这种情况下,将接受该模式,但不会删除实际的文件夹。 她需要还原模式以包含该文件夹,提交更改,然后重新应用新的模式。

注意

对于在启用稀疏签出模式的情况下创建的存储库,无法为其禁用稀疏签出。

在启用稀疏签出的情况下进行更改和推送更改

可以从“存储库”界面编辑现有文件,然后提交和推送文件。 创建新文件夹时,请将它们包含在为该存储库指定的锥形模式中。

在锥形模式之外包含新文件夹会导致执行提交和推送操作期间出错。 要修复错误,请编辑锥形模式,以包含你要尝试提交和推送的新文件夹。

存储库配置文件的模式

提交输出配置文件使用类似于 gitignore 模式的模式,并执行以下操作:

  • 肯定模式允许包含匹配的笔记本的输出。
  • 否定模式禁止包含匹配的笔记本的输出。
  • 将按顺序针对所有笔记本来评估模式。
  • 将忽略无效路径或未解析为 .ipynb 笔记本的路径。

肯定模式:要包含来自笔记本路径 folder/innerfolder/notebook.ipynb 的输出,请使用以下模式:

**/*
folder/**
folder/innerfolder/note*

否定模式:要排除某个笔记本的输出,请确定是否没有匹配的肯定模式,或者在配置文件的正确位置添加否定模式。 否定(排除)模式以 ! 开头:

!folder/innerfolder/*.ipynb
!folder/**/*.ipynb
!**/notebook.ipynb

稀疏签出限制

稀疏签出目前不适用于大小超过 4GB 的 Azure DevOps 存储库。

添加存储库并稍后进行远程连接

还可以在 Azure Databricks 中创建新的存储库,并在稍后添加远程 Git 存储库 URL。

  1. 要创建一个不链接到远程 Git 存储库的新 Databricks 存储库,请单击“添加存储库”按钮。 取消选择“通过克隆 Git 存储库创建存储库”,输入该存储库的名称,然后单击“创建存储库”

    添加不进行远程连接的存储库。

  2. 准备好添加 Git 存储库 URL 后,请单击工作区中 Databricks 存储库名称旁边的向下箭头以打开“存储库”菜单,然后选择“Git…”以打开 Git 对话框

    存储库菜单:添加 Git 存储库 URL。

  3. 在“Git 存储库 URL”字段中,输入远程存储库的 URL,并从下拉菜单中选择你的 Git 提供程序。 单击“保存” 。

    Git 对话框设置选项卡。

使用存储库 API

若要以编程方式管理和使用 Git 文件夹,请使用 Git 文件夹 REST API