使用版本控制和部署

本页面假定您的项目已设置为使用版本控制。如果您看到的是配置 Git 按钮,而不是本页面上所述的选项,则需要先为项目设置 Git

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

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

使用 Git 分支

Git 的主要优势之一是,Looker 开发者可以在分支(文件代码库的隔离版本)中工作。您可以在不影响其他用户的情况下进行开发和测试。作为 Looker 开发者,您在处于开发模式时始终会使用 Git 分支。

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

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

个人分支

为了提高性能,当您首次在开发模式下打开 LookML 项目时,Looker IDE 会显示该项目的生产模式版本,以及创建开发者副本按钮。点击项目的创建开发者副本按钮后,Looker IDE 会创建您的个人 Git 分支,并以开发模式加载 LookML 项目。

您的个人分支以 dev- 开头,并包含您的姓名。

个人分支专属于您,无法删除。您的个人分支对所有其他开发者都是只读的。如果您正与其他开发者协作处理某个项目,则可能需要创建新分支,以便其他人可以切换到该分支并贡献更改。

创建新的 Git 分支

如果您正在进行简单的修复,并且没有与其他开发者协作,那么您的个人分支通常是一个不错的选择。您可以使用个人分支快速进行更新,然后提交更改并将其推送到生产环境。

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

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

创建新分支之前:

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

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

  1. 验证您是否已开启开发模式
  2. Develop 菜单中找到项目文件

  3. 在左侧的图标菜单中选择 Git 图标,打开 Git 操作面板。

  4. 选择查看分支下拉菜单。

  5. 选择 New Branch

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

  7. 选择从以下对象创建下拉菜单,然后选择一个现有分支作为新分支的起点。

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

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

命名 Git 分支的规则

Looker 使用 Git 指定的分支命名惯例要求。

Git 分支名称不得包含以下内容:

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

此外,仅当星号 (*) 表示整个路径组成部分(例如 foo/*bar/*/baz)时,分支名称才能包含星号,在这种情况下,星号会被解读为通配符,而不是实际分支名称的一部分。

切换到其他 Git 分支

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

此外,如果您在当前分支上有未提交的更改,则必须先提交当前分支上的更改,然后才能切换到现有分支。

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

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

管理 Git 分支

项目设置分支管理标签页会显示一个表格,其中包含 Looker 项目的所有 Git 分支。如需打开分支管理标签页,请先从左侧的图标菜单中选择设置图标,以进入项目设置。接下来,选择分支机构管理标签页。

分支机构管理标签页中,您可以执行以下操作:

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

该表格包含以下信息:

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

删除 Git 分支

分支管理标签页中,您可以删除表格中带有删除按钮的分支。您无法删除以下分支:

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

在表格中,这些分支没有删除按钮。不过,表格的操作列会显示无法删除相应分支的原因。

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

不过,如果该分支是由其他 Looker 开发者创建的,或者其他开发者已检出该分支,那么这些开发者仍会拥有该分支的本地版本。如果 Looker 开发者向其本地分支版本提交内容并将其推送到生产环境,您将再次看到该分支的远程版本。如果您确实想恢复分支,此功能会非常有用。否则,当您删除某个分支时,所有其他 Looker 开发者都应删除同一分支,以确保不会有人将其推送到远程而导致该分支意外重新显示。

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

  1. 如需删除多个分支,请先选中相应分支的复选框,然后选择删除所选分支
  2. 如需删除单个分支,请选择分支名称旁边的删除

在 Looker 中执行 Git 命令

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

Git 按钮会显示不同的选项,具体取决于您在进行更改和部署到生产环境的过程中所处的阶段。一般来说,按钮上显示的选项是您下一步行动的最佳指南。

如果您的开发者分支与生产分支同步,Git 按钮会显示最新消息,并且无法选择。

当项目配置为使用 Git 后,您可以选择 Git 操作按钮以打开 Git 操作面板。

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

将更改部署到生产环境

借助默认的 Looker Git 集成,Looker 会通过以下 Git 工作流提示开发者:

这意味着,在默认 Git 集成模式下,所有开发者都会将自己的更改合并到名为 master 的分支中,而 master 分支上的最新提交将用于 Looker 的生产环境。

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

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

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

查看未提交的更改

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

您可以从 Git Actions 面板中选择 View Uncommitted Changes 选项,获取所有文件的差异摘要。

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

  • 被替换文件的名称和添加文件的名称。
    • 被替换文件的名称(以 --- 表示)和添加文件的名称(以 +++ 表示)。在许多情况下,这可能表示同一文件的不同版本,修订版本分别以 --- a/+++ b/ 表示。
    • 已删除的文件显示为替换 null 文件 (+++ /dev/null)。
    • 添加的文件显示为替换空文件 (--- /dev/null)。
  • 更改开始的行号。

    例如,-101,4 +101,4 表示在文件的第 101 行,移除了 4 行并添加了 4 行。如果删除的文件有 20 行,则会显示 -1,20 +0,0,表示在文件的第一行中,20 行被移除并替换为零行。
  • 更新后的文字:
    • 已删除的行以红色显示。
    • 添加的行以绿色显示。

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

提交更改

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

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

如果自您上次更新本地分支以来,其他开发者对生产分支做出了更改,Looker 会要求您从生产分支拉取这些更新。在这种情况下,Git 按钮会显示文本从生产环境拉取

如果您的项目已启用高级部署模式,则 Git 按钮会显示“从主分支拉取”文本。

保存更改(并根据需要修正所有 LookML 警告或错误)并从生产环境拉取(如果需要)后,Git 按钮会显示“提交更改并推送”文本

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

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

输入简要说明您所做更改的消息,然后清除您不想纳入同步范围的任何文件旁边的复选框。然后,选择提交以提交更改。

检查是否存在未构建的 PDT

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

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

运行数据测试

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

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

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

运行数据测试后,项目健康状况面板会显示进度和结果。

  • 如果数据测试的断言对于测试查询中的每一行都为 true,则该测试通过。如需详细了解如何设置测试断言和查询,请参阅 test 参数文档页面。
  • 如果数据测试失败,项目健康状况面板会提供相关信息,说明测试失败的原因,无论是测试在模型逻辑中发现了错误,还是测试本身无效。
  • 在数据测试结果中,您可以选择数据测试的名称,直接前往数据测试的 LookML;也可以选择探索查询按钮,打开一个包含数据测试中所定义查询的探索。

部署到生产环境

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

  • 如果您的项目配置为高级部署模式,IDE 会提示您将更改合并到主分支中。合并提交后,具有 deploy 权限的 Looker 开发者可以使用 Looker IDE 部署管理器或使用 WebhookAPI 端点将提交部署到生产环境。
  • 如果您的项目已配置为使用拉取请求进行 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. 选择一种恢复选项:
    • 如需仅还原未提交的更改,请选择还原未提交的更改。您还可以选择查看更改链接,查看将要还原的更改。
    • 如需还原所有更改(包括未提交的更改和已提交的更改),请选择 Revert to Production
  3. 如需完成恢复流程,请选择确认

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

重命名文件时,您实际上是在删除原始文件并创建一个具有新名称的新文件。由于此操作涉及多个文件,因此您无法使用恢复文件选项来撤消文件重命名操作。如果您想撤消文件重命名操作,请使用 Git Actions 面板中的 Revert to... 选项。

此外,如果您已删除某个文件,该文件将不再显示在 IDE 文件浏览器中。如果您想恢复已删除的文件,请使用 Git Actions 面板中的 Revert to... 选项。

解决合并冲突

通常,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 面板中显示的合并警告中的文件链接来查找受影响的文件。
  2. 在文件中,找到存在合并冲突的行,删除您想保留的文本版本,并删除所有合并冲突标记。
  3. 保存文件,并针对标记为存在合并冲突的任何其他文件重复上述步骤。

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

现在,您已解决合并冲突并将解决方案推送到生产环境,其他开发者可以从生产环境拉取并继续正常工作。

Git 垃圾回收

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

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