使用版本控制和部署

本页面假定您的项目已针对版本控制进行设置。如果您看到 Configure Git 按钮,而不是本页介绍的选项,则需要先为项目设置 Git

Looker 使用 Git 记录更改并管理文件版本。每个 LookML 项目都对应于一个 Git 代码库,并且每个开发者分支都与一个 Git 分支相关联。

Looker 可以配置为与许多 Git 提供商(例如 GitHub、GitLab 和 Bitbucket)搭配使用。如需了解如何为您的 Looker 项目设置 Git,请参阅设置和测试 Git 连接文档页面。

使用 Git 分支

Git 的一个主要优势是,Looker 开发者可以在分支(即文件存储库的独立版本)中工作。您可以在不影响其他用户的情况下进行开发和测试。作为 Looker 中的开发者,每当处于开发模式时,您都会使用 Git 分支。

Git 的另一个主要特点是它能够轻松与其他开发者协作。您可以创建分支并(如果需要)进行更改,然后其他开发者可以切换到该分支来查看或更改分支。如果其他开发者对该分支做出了更改,Looker 会显示拉取远程更改按钮。您应该将这些已提交的更改提取到分支,然后再进行其他更改。

您也可以删除主分支、当前分支或开发者的个人分支以外的分支。

个人分支

当您首次进入开发模式时,Looker 会自动创建您的个人 Git 分支。您的个人分支以 dev- 开头,并且包含您的姓名。

您的个人分支是您自己创建的,无法删除。您的个人分支对所有其他开发者而言是只读的。如果您与其他开发者协作完成一个项目,则可能需要创建一个新分支,以便其他人可以切换到该分支并贡献更改。

创建新的 Git 分支

如果您从事的是一个简单的修复工作,而不是与其他开发者合作,您的个人分支通常是一个不错的工作场所。您可以使用个人分支进行快速更新,然后提交更改并将其推送到生产环境。

不过,除了您的个人分支之外,您可能还需要创建新的 Git 分支。在以下情况下,新的 Git 分支会很有意义:

  • 您正在与其他开发者合作。由于您的个人分支对于其他开发者是只读的,如果您希望与他人协作,应创建一个新的 Git 分支,以便其他开发者可以向该分支写入数据。当您与他人协作时,请务必在每次继续工作时应用更改。这样,您便可以在继续开发工作之前收到所有开发者提供的最新更新。
  • 您正在同时处理多组功能。有时,您可能正在进行一个大项目,但想要解决一个小问题或进行快速修复。在这种情况下,您可以将更改提交到所在的分支,然后创建或切换到另一个分支,以使用一组单独的功能。您可以在新分支中进行修复,然后将该分支的更改部署到生产环境中,然后再恢复原始分支中的工作。

创建新分支之前,请执行以下操作:

  • 如果当前分支存在合并冲突,则必须先解决冲突,然后才能创建新分支。
  • 如果您对当前分支有任何未提交的更改,则必须先对当前分支提交更改,然后才能创建新分支。
  • 如果要从现有开发分支(而非生产分支)开始创建分支,请先切换到开发分支,以获取最新版本的开发分支,然后拉取远程更改以同步该分支的本地版本。

如需创建新的 Git 分支,请执行以下操作:

  1. 确认您已开启开发模式
  2. 开发菜单中,转到您的项目文件

  3. 选择左侧图标菜单中的 Git 图标以打开 Git Actions 面板。

  4. 选择 View Branches 下拉菜单。

  5. 选择 New Branch

  6. New Branch 窗口中,输入分支的名称。请注意,Git 分支名称存在限制;如需了解命名要求,请参阅本页面中的 Git 分支命名规则

  7. 选择创建来源下拉菜单,然后选择一个现有分支以用作新分支的起点。

  8. 选择创建以创建您的分支。

或者,您也可以从项目设置页面的分支管理标签创建 Git 分支。

Git 分支的命名规则

Looker 遵循 Git 指定的分支命名惯例要求。

Git 分支名称不得

  • 包含空格字符
  • 包含双句点:..
  • 包含反斜杠:\
  • 包含序列:@{
  • 包含问号:?
  • 包含左方括号:[
  • 包含 ASCII 控制字符:~\^:
  • 以英文句点开头:.
  • 以前缀开头:dev-(为 Looker 开发者的个人分支预留)
  • 以正斜杠结尾:/
  • 以扩展名结尾:.lock

此外,如果分支名称表示整个路径组成部分(例如 foo/*bar/*/baz),则分支名称只能包含星号 (*);在这种情况下,系统会将它解释为通配符,而不是实际分支名称的一部分。

切换到其他 Git 分支

如果当前分支存在合并冲突,则必须先解决冲突,然后才能切换到其他分支。

此外,如果当前分支有未提交的更改,您将无法切换到现有分支,除非您在当前分支上提交更改

如需切换到其他 Git 分支,请按以下步骤操作:

  1. 在此项目中,选择左侧图标菜单中的 Git 图标,转到 Git Actions 面板。
  2. Git 操作面板中,选择当前 Git 分支名称右侧的 Git 分支下拉菜单。
  3. 在菜单中选择要切换到的分支,或在搜索框中输入分支名称。分支名称搜索不区分大小写。例如,您可以搜索“DEV”,然后查看名称中包含“dev”、“DEV”、“Dev”等名称的所有分支。

管理 Git 分支

“项目设置”页面“分支管理”标签页会显示一个表格,其中包含 Looker 项目的所有 Git 分支。如需打开 Branch Management 标签页,首先选择左侧图标菜单中的 Settings 图标,前往 Project Settings 页面。接下来,选择 Branch Management(分支管理)标签页。

Branch Management(分支管理)标签页上,您可以执行以下操作:

  1. 选择 New Branch 按钮,创建一个新分支。如需了解详情,请参阅本页面上的创建新的 Git 分支部分。
  2. 搜索栏中搜索分支名称。
  3. 选择刷新按钮,以刷新表。
  4. 选择列名称即可对表格进行排序。

表格包含以下信息:

  • 名称:Git 分支的名称。Looker 开发者的个人分支dev- 开头,包含开发者的名字和姓氏。
  • 状态:您的分支的本地版本与分支的远程版本之间的差异。例如,3 commits behind 状态表示分支的本地版本落后于分支的远程版本,落后了三次提交。由于 Looker 始终使用主实例的远程版本,因此分支管理标签页不会显示主分支本地版本的状态。主分支始终会被视为最新。
  • 上次更新时间:Looker 开发者向该分支提交代码至今的时间。
  • 操作:用于删除分支的按钮,或表示分支不符合删除条件的原因。

删除 Git 分支

Branch Management(分支管理)标签页中,您可以删除表格中具有 Delete 按钮的分支。您无法删除以下分支:

  • master 分支
  • 您当前的分支
  • Looker 开发者的个人分支

在表格中,这些分支没有删除按钮。而是会在表的 Action 列中显示无法删除分支的原因。

分支一经删除便无法恢复。删除分支时,Looker 会同时移除该分支的本地版本和远程版本。

但是,如果该分支是由其他 Looker 开发者创建的,或者其他开发者已签出该分支,那么这些开发者仍会拥有该分支的本地版本。如果 Looker 开发者提交到其本地版本的分支并将其推送到生产环境,您将再次看到分支的远程版本。如果您确实要恢复该分支,这会非常方便。否则,当您删除某个分支时,所有其他 Looker 开发者应删除同一分支,以确保该分支不会被其他人推送到远程分支所不小心重新出现。

如需从项目中删除一个或多个 Git 分支,请先从左侧图标菜单中选择设置图标,转到项目设置页面。然后选择 Branch Management(分支管理)标签页。在 Branch Management(分支管理)标签页中,您可以通过两种方式删除分支:

  1. 如需删除多个分支,请先选中分支复选框,然后选择 Delete Selected Branches
  2. 选择分支名称旁边的删除可删除单个分支。

在 Looker 中执行 Git 命令

Looker 具有可与 Git 服务集成的内置界面。Looker 会在 LookML IDE 的右上角显示 Git 按钮

Git 按钮会显示不同的选项,具体取决于您在进行更改和部署到生产环境时所处的阶段。一般来说,该按钮上显示的选项是最适合您后续操作的指南。

如果您的开发者分支与正式版分支同步,Git 按钮会显示 Up to Date 消息,并且无法选择。

为项目配置 Git 后,您可以选择 Git Actions 按钮以打开 Git Actions 面板。

Git 操作面板上提供的命令取决于您在进行更改和部署到生产环境的过程中所处的阶段。

将更改发布到生产环境

使用默认的 Looker Git 集成时,Looker 会提示开发者完成以下 Git 工作流:

这意味着,在使用默认的 Git 集成时,所有开发者都会将其更改合并到一个名为 master 的分支中,并且 master 分支上的最新提交会用于 Looker 生产环境。

对于高级 Git 实现,您可以自定义以下工作流:

  • 您可以让开发者为您的 Git 生产分支提交拉取请求,而不是允许开发者通过 Looker IDE 合并其更改。如需了解详情,请参阅配置项目版本控制设置文档页面。
  • 您可以使用 Git Production Branch Name 字段来指定 Looker 应将 Git 代码库中的哪个分支用作 Looker 开发者分支的目标分支。如需了解详情,请参阅配置项目版本控制设置文档页面。
  • 您可以使用高级部署模式指定要部署到 Looker 生产环境的其他提交 SHA 或标记名称,而不是在生产分支上使用最新提交。(如果要从其他分支部署提交,可以使用高级部署模式 webhookAPI 端点。)如需了解详情,请参阅高级部署模式文档页面。

如果您看到 Configure Git 按钮,而不是本部分中介绍的选项,则需要先为项目设置 Git

查看未提交的更改

当您处于开发模式且有未提交的更改时,LookML IDE 会显示多个指示器,如修改和验证 LookML 文档页面的标记添加、更改和删除部分所述。

您可以从 Git 操作面板中选择查看未提交的更改选项,查看所有文件的差异摘要。

向项目未提交的更改窗口中,Looker 会显示项目所有文件中所有未提交且已保存更改的摘要。对于每项更改,Looker 都会显示以下信息:

  • 被替换文件的名称和所添加文件的名称。
    • 被替换文件的名称(用 --- 表示)和添加的文件的名称(用 +++ 表示)。在很多情况下,可能会显示同一文件的不同版本,其修订版本由 --- a/+++ b/ 标识。
    • 删除的文件会显示为替换了 null 文件 (+++ /dev/null)。
    • 已添加的文件显示为替换 null 文件 (--- /dev/null)。
  • 更改开始的行号。

    例如,-101,4 +101,4 表示在文件的第 101 行,移除了 4 行,添加了 4 行。如果已删除的文件包含 20 行,系统会显示 -1,20 +0,0,表示文件的第一行已移除 20 行并替换为 0 行。
  • 更新后的文本:
    • 已删除的行显示为红色。
    • 已添加的行以绿色显示。

要显示单个文件的差异摘要,请从该文件的菜单中选择查看更改选项。

提交更改

对 LookML 项目进行更改并保存后,IDE 可能会要求您验证 LookML。在这种情况下,Git 按钮会显示文本“验证 LookML”。

是否需要这样做取决于您的项目的代码质量设置。如需详细了解内容验证器,请参阅验证 LookML 文档页面。

如果自您上次更新本地分支以来,其他开发者对生产分支进行了更改,Looker 会要求您从生产分支中提取这些更新。在这种情况下,Git 按钮会显示文本 Pull from Production

如果您的项目启用了高级部署模式,则 Git 按钮会显示文本从主分支拉取 (Pull from Primary Branch)。

保存更改(如果需要并修复任何 LookML 警告或错误)并从生产环境中拉取(如果需要)后,Git 按钮会显示提交更改并推送文本。

如果需要,您可以先检查未提交的更改,然后再提交。

当您准备好提交更改时,请使用 Git 按钮将这些更改提交到当前分支。Looker 会显示提交对话框,其中列出了已添加、更改或删除的文件。

输入一条消息,简要说明您所做的更改,并取消选中您不希望同步的文件旁边的复选框。然后选择提交以提交更改。

检查未构建的 PDT

如果您更改了项目中的任何 PDT,最好在部署到生产环境时构建所有 PDT,以便这些表可以立即用作生产版本。如需检查项目中 PDT 的状态,请选择 Project Health 图标,打开 Project Health 面板,然后选择验证 PDT 状态按钮。

如需详细了解如何在 LookML 项目中检查未构建的 PDT,以及如何在开发模式下使用派生表,请参阅 Looker 中的派生表文档页面。

运行数据测试

您的项目可能包含一个或多个 test 参数,用于定义数据测试以验证 LookML 模型的逻辑。如需了解如何在项目中设置数据测试,请参阅 test 参数文档页面。

如果您的项目包含数据测试,且处于开发模式,则可通过多种方式启动项目的数据测试:

  1. 如果您的项目设置配置为在将文件部署到生产环境之前需要通过数据测试,IDE 会在您提交项目更改后显示运行测试按钮,以运行项目的所有测试,无论哪个文件定义了测试。您必须先通过数据测试,然后才能将更改部署到生产环境中。
  2. Project Health 面板中选择 Run Data Tests 按钮。无论测试是由哪个文件定义的,Looker 都会运行您项目中的所有数据测试。
  3. 从该文件的菜单中选择 Run LookML Tests 选项。Looker 将仅运行当前文件中定义的测试。

运行数据测试后,Project Health 面板将显示进度和结果。

  • 对于测试查询中的每一行,如果测试的断言均为 true,则表明数据测试通过。如需详细了解如何设置测试断言和查询,请参阅 test 参数文档页面。
  • 如果数据测试失败,Project Health 面板会提供以下信息:测试失败的原因,测试是在模型的逻辑中发现了错误,还是测试本身无效。
  • 从数据测试结果中,您可以选择数据测试的名称以直接转到数据测试的 LookML,也可以选择 Explore Query 按钮使用数据测试中定义的查询打开探索。

部署到生产环境

向分支提交更改后,Looker IDE 会提示您将更改合并到主要分支。IDE 中显示的提示类型取决于项目的配置:

  • 如果您的项目配置为高级部署模式,IDE 会提示您将更改合并到主分支。合并提交后,拥有 deploy 权限的 Looker 开发者可以使用 Looker IDE 部署管理器或使用网络钩子API 端点,将提交内容部署到生产环境中。
  • 如果您的项目配置为使用拉取请求进行 Git 集成,系统会提示您使用 Git 提供方的界面打开拉取请求。
  • 否则,对于默认的 Looker Git 集成,如果您拥有 deploy 权限,Looker IDE 会提示您将更改合并到生产分支,并将更改部署到 Looker 实例的正式版。

高级部署模式

通过默认的 Looker Git 集成,Looker 开发者可将更改内容提交到其开发分支,然后将其开发分支合并到生产分支。然后,当您部署到 Looker 环境时,Looker 会在生产分支上使用最新提交。(如需了解默认 Git 工作流以及高级 Git 实现的其他选项,请参阅本页面中的将更改部署到生产环境部分。)

如果您不希望始终在 Looker 环境的生产分支上使用最新提交,那么拥有 deploy 权限的开发者可以使用高级部署模式来指定要用于 Looker 环境的确切提交。这在多环境开发者工作流中非常有用,其中每个环境都指向不同版本的代码库。它还让一位或多位开发者或管理员能够更好地控制部署到生产环境的更改。

启用高级部署模式后,Looker IDE 不会提示开发者将其更改部署到生产环境中。相反,IDE 会提示开发者将其更改合并到生产分支中。之后,您只能通过以下方式部署更改:

  • 在 Looker IDE 中使用部署管理器
  • 触发 webhook
  • 使用 API 端点

如需了解详情,请参阅高级部署模式文档页面。

检查更改的影响

将您的更改发布到组织后,您可以使用内容验证来确保未使任何信息中心或已保存的 Look 失效。若有,您将有机会解决这些问题。

处理典型问题

在处理模型时,您可能需要执行以下操作:

  • 放弃您的更改

    有时,您可能想要放弃数据建模更改。如果尚未保存,您只需刷新或离开该页面,然后接受警告提示即可。如果您保存更改,则可以还原未提交的更改,如还原未提交的更改部分中所述。

  • 处理与其他开发者工作的合并冲突

    如果有多个开发者在处理您的数据模型,Git 通常会处理这种情况。但是,Git 偶尔需要人工来解决合并冲突

某些更改(例如更改字段名称)可能会影响现有的信息中心和 Look。如前所述,在向组织发布更改后,您可以使用内容验证功能来检查自己的内容并解决所有问题。

还原未提交的更改

在处理个人开发分支时,如果您不想部署这些更改,则可以还原已保存的未提交的更改。您可以还原项目中所有文件的所有未提交的更改,也可以仅还原单个文件中的更改。

如需还原所有文件未提交的更改,请执行以下操作:

  1. Git 操作面板中选择还原为... 选项。
  2. 选择还原选项:
    • 要仅还原未提交的更改,请选择还原未提交的更改。您也可以选择查看更改链接,查看会还原的更改。
    • 如需还原所有更改(包括未提交的和已提交的更改),请选择还原为正式版
  3. 如需完成还原过程,请选择确认

要还原对单个文件内容的任何添加或删除操作,请从该文件的菜单中选择还原更改选项:

如果您重命名文件,实质上就是删除原始文件并用新名称创建新文件。由于这涉及多个文件,因此您无法使用还原文件选项撤消对文件的重命名。如果要撤消文件重命名操作,请使用 Git 操作面板中的还原为... 选项。

此外,如果您删除了某个文件,IDE 文件浏览器中将不再显示该文件。如果要还原删除某个文件的操作,请使用 Git 操作面板中的还原为... 选项。

解决合并冲突

通常,Git 会自动将您的新更改与 LookML 文件的正式版合并。当 Git 遇到存在冲突的更改并且无法确定应保留哪些更改时,就会发生合并冲突。这通常是因为在您上次拉取之后,其他开发者做出了更改,并且您在同一区域进行了更改。如果您的代码存在合并冲突,在您提交更改并从生产环境中拉取后,Looker 会显示合并冲突警告。

当 Looker 显示合并冲突警告时,我们建议您先解决合并冲突,然后再做出进一步更改。将合并冲突推送到生产环境会导致解析错误,进而可能阻止数据探索。如果您是高级 Git 用户,并且想要继续推送更改,请选择不解决按钮。

在 LookML 文件中,存在冲突的行标记如下:

<<<<<<< HEAD
Your code
&#61;&#61;&#61;&#61;&#61;&#61;&#61;
Production code
>>>>>>> branch 'master'

Looker 会显示以下合并标记来指示合并冲突:

  • <<<<<<< HEAD 标记冲突行的开头。
  • >>>>>>> branch 'master' 标记冲突行的结束。
  • ======= 分隔代码的每个版本,以便您进行比较。

在前面的示例中,your code 表示您提交的更改,production code 表示 Git 无法自动将更改合并到其中的代码。

如需解决合并冲突,请执行以下操作:

  1. 查找存在合并冲突的文件。Looker 会将这些文件标记为红色,或者您也可以在项目中搜索合并标记(例如 <<<< 或 HEAD),以查找项目中的所有冲突。您还可以通过在 Git Actions 面板中显示的合并警告中选择 files 链接来查找受影响的文件。
  2. 在文件中,找到存在合并冲突的行,删除您想要保留的文本版本,并删除所有合并冲突标记。
  3. 保存文件,然后对标记为合并冲突的任何其他文件重复上述步骤。

  4. 解决所有合并冲突并从项目中删除所有合并标记后,提交更改将其部署到生产环境

现在,您已经解决了合并冲突并将您的解决方案推送至生产环境,其他开发者可以从生产环境中拉取数据并继续照常工作。

Git 垃圾回收

Git 垃圾回收可清理不必要的文件并压缩文件修订版本以优化 Git 代码库。当您更新或重新启动 Looker 实例时,Git 垃圾回收 (git gc) 会自动运行。为了避免过于频繁地运行 git gc,Looker 自上次 git gc 起等待 30 天,然后在下次重新启动时运行 git gc

在极少数情况下,您可以尝试在 git gc 运行时将更改推送到远程将分支推送到远程。如果 Looker 显示错误,请等待一两分钟,然后重试推送您的更改。