在 Databricks Git 文件夹 (Repos) 中运行 Git 操作

本文介绍如何使用 Git 文件夹在 Databricks 工作区中执行常见的 Git 操作,包括克隆、分支、提交和推送。

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

  1. 在边栏中选择“工作区”,然后浏览到要在其中创建 Git 存储库克隆的文件夹

  2. 单击工作区右上角的“添加”右侧的向下箭头,然后从下拉列表中选择“Git 文件夹”

    “添加存储库”UI。

  3. 在“创建 Git 文件夹”对话框中提供以下信息

    • 要克隆的 Git 存储库的 URL,格式为 https://example.com/organization/project.git
    • 要克隆的存储库的 Git 提供程序。 选项包括“GitHub”、“GitHub Enterprise”、“GitLab”和“Azure DevOps (Azure Repos)”
    • 工作区中的、将包含克隆存储库内容的文件夹的名称
    • 是否使用稀疏签出,在这种情况下,只会克隆使用锥形模式指定的子目录

    从 Git 文件夹 UI 克隆。

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

  1. 单击“创建 Git 文件夹”。 远程存储库的内容将克隆到 Databricks 存储库,你可以通过工作区使用支持的 Git 操作开始处理这些内容。

最佳做法:在 Git 文件夹中协作

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

重要

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

访问 Git 对话框

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

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

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

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

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

你将看到一个全屏对话框,可在其中执行 Git 操作。

用于在 Databricks 工作区中执行 Git 操作的对话框。

  1. 当前工作分支。 在此处可以选择其他分支。 如果其他用户有权访问此 Git 文件夹,并且他们共享同一工作区,则更改该分支也会更改这些用户的分支。 请参阅建议的最佳做法以避免此问题。
  2. 用于创建新分支的按钮。
  3. 签入当前分支的文件资产和子文件夹的列表。
  4. 可将你转到 Git 提供程序并显示当前分支历史记录的按钮。
  5. 用于从远程 Git 存储库拉取内容的按钮。
  6. 可在其中添加提交消息以及有关更改的可选扩展说明的文本框。
  7. 用于将工作提交到工作分支并将更新的分支推送到远程 Git 存储库的按钮。

单击右上角的 Kebab 菜单 串形菜单可以从其他 Git 分支操作中进行选择,例如硬重置、合并或变基。

Git 文件夹对话框中用于执行分支操作的下拉菜单。

这是在工作区 Git 文件夹中执行 Git 操作的主位置。 你只能执行用户界面中显示的 Git 操作。

创建新分支

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

Git 对话框新建分支。

切换到其他分支

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

Git 对话切换到另一分支

重要

签出 Git 文件夹中的分支后,该分支始终有可能被其他人在远程 Git 存储库中删除。 如果远程存储库中的分支被删除,其本地版本可以在关联的 Git 文件夹中保留最多 7 天。 无法删除 Databricks 中的本地分支,因此,如果必须移除它们,则必须删除并重新克隆存储库。

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

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

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

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

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

注意

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

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

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

重要

拉取上游更改的 Git 操作会清除笔记本状态。 有关详细信息,请参阅传入更改清除笔记本状态

合并分支

从 Git 操作对话框右上角的 Kebab 菜单 串形菜单中选择 Git“合并”操作可以访问该操作

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

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

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

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

从 Git 操作对话框右上角的 Kebab 菜单 串形菜单中选择 Git“变基”操作可以访问该操作

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

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

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

警告

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

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

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

  1. 在 Git 文件夹 UI 中的“分支”菜单中,选择要变基的分支

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

    串形菜单中的 Git rebase 函数。

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

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

Databricks Git 文件夹运行 git commitgit push --force 来更新远程 Git 存储库。

解决合并冲突

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

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

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

有两个主要选项:

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

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

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

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

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

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

提示

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

手动解决冲突

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

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

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

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

Git reset

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

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

重置为上游(远程)分支

在这种情况下使用 git reset

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

重要

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

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

  1. 在 Git 文件夹 UI 的“分支”菜单中,选择要重置的分支

    Git 文件夹 UI 中的分支选择器。

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

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

  3. 选择要重置的分支。

    Git reset --hard 对话框。

配置稀疏签出模式

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

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

  1. 在“添加 Git 文件夹”对话框中,打开“高级”

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

    “添加 Git 文件夹”对话框中的稀疏签出选项。

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

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

锥形模式的工作原理

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

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

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

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

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

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

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

注意

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

修改稀疏签出设置

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

注意以下行为:

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

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

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

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

注意

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

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

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

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

存储库配置文件的模式

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

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

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

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

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

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

稀疏签出限制

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

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

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