使用版本控制和部署

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

用于版本控制的 Git 集成

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

Looker 通常使用 GitHub 进行 LookML 源文件管理。但是,可以将 Looker 配置为与其他 Git 提供商(如 GitLab、Bitbucket)或可以使用 SSH 密钥进行身份验证的任何 Git 服务器配合使用。

GitHub 不接受在 github.com 上对 Git 操作进行身份验证的帐号密码。如需了解详情,请参阅 GitHub 的博文。如需使用 HTTPS 将 Looker 项目连接到 GitHub,请使用 GitHub 中的开发者设置创建个人访问令牌。对于使用 HTTPS 连接到 GitHub 的现有 Looker 项目,请使用 GitHub 中的个人访问令牌重置您的 Git 连接

Looker 项目仅使用一个帐号与您的 Git 提供商进行所有 Git 交互(如需了解如何设置 Git,请参阅将 Looker 与 Git 集成文档页面)。对于每个 Looker 项目,您的所有 Looker 开发者的所有开发都将通过这个 Git 帐号完成。这意味着,您的 Looker 开发者无需拥有自己的 Git 提供商帐号,除非您的 Looker 实例设置了额外的 Git 集成选项之一。在这种情况下,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. 点击 Create From(创建位置)下拉菜单,然后选择一个现有分支作为新分支的起点。

  8. 点击 Create 以创建您的分支。

或者,您也可以在 Project Settings 页面的 Branch Management(分支管理)标签页中创建 Git 分支。

Git 分支的命名规则

Looker 使用 Git 指定的分支命名规范。

Git 分支名称不得

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

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

切换到另一个 Git 分支

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

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

如需切换到其他 Git 分支,请执行以下操作:

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

管理 Git 分支

“项目设置”页面分支管理标签页会显示一个表格,其中包含 Looker 项目的所有 Git 分支。如需打开 Branch Management 分支,请点击左侧图标菜单中的 Settings 图标转到 Project Settings 页面,然后选择 Branch Management 标签页。

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

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

该表包含以下信息:

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

删除 Git 分支

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

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

在该表中,这些分支没有删除按钮。但该表的 Action 列会显示相应分支无法删除的原因。

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

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

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

  1. 通过选中分支复选框并点击删除所选分支来删除多个分支。
  2. 点击分支名称旁边的删除以删除单个分支。

在 Looker 中执行 Git 命令

Looker 具有与 Git 服务集成的内置接口。在 LookML IDE 中,您会在右上角看到一个 Git 按钮:

Git 按钮会根据您执行更改以及部署到生产环境的位置,显示不同的选项。总的来说,按钮上显示的选项是您后续行动的最佳指南。

如果您的开发者分支与生产分支同步,您会看到最新消息:

为 Git 配置项目后,Android Studio 会显示 Git Actions 面板,其中包含额外的 Git 命令:

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

将更改发布到生产环境中

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

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

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

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

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

查看未提交的更改

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

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

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

  • 被替换文件的名称和所添加文件的名称。
    • 被替换文件的名称(用 --- 表示)和所添加文件的名称(用 +++ 表示)。在许多情况下,系统可能会显示同一文件的不同版本,其修订版本由 --- a/+++ b/ 标识。
    • 删除的文件会显示为替换空文件 (+++ /dev/null)。
    • 添加的文件显示为替换 null 文件 (--- /dev/null)。
  • 进行更改开头的行号。
    例如,-101,4 +101,4 表示文件的第 101 行已移除 4 行,添加了 4 行。如果已删除的文件有 20 行,则会显示 -1,20 +0,0,这表示在文件的第一行,20 行已被移除并替换为 0 行。
  • 更新的文本:
    • 已删除的行会以红色显示。
    • 已添加的行以绿色显示。

您还可以从文件菜单中选择查看更改选项,获取单个文件的差异摘要:

提交更改

在您对 LookML 项目进行任何更改并保存后,Android Studio 可能会要求您验证 LookML:

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

如果自您上次更新本地分支以来,其他开发者对生产分支进行了更改,Looker 会要求您从生产分支提取这些更新:

如果您的项目已启用高级部署模式,此按钮将显示从主要分支拉取

在您保存更改(并修复所有 LookML 警告或错误,如果需要)并从生产中提取(如果需要)后,Git 按钮会显示以下消息:

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

准备好提交更改时,请使用 Commit Changes & Push 按钮将这些更改提交到当前分支。系统会显示以下窗口,其中列出了已添加、更改或删除的文件。

输入消息,简要说明您所做的更改,并取消选中任何您不希望同步的文件。然后点击提交以提交更改。

检查是否有未构建的 PDT

如果您更改了项目中的任何 PDT,最好在部署到生产环境时构建所有 PDT,以便表可以立即用作生产版本。在部署更改之前,您可以在 Project Health 面板中检查项目中是否有未构建的 PDT。点击 Project Health 图标,然后点击 Validate PDT Status 按钮:

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

运行数据测试

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

您必须处于开发模式才能运行数据测试。进入开发模式后,您可以通过多种方式为项目启动数据测试:

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

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

  • 对于测试查询中的每一行,当该断言为 true 时,就会通过数据测试。如需详细了解如何设置测试断言和查询,请参阅 test 参数文档页面。
  • 如果数据测试失败,项目健康状况面板将提供有关测试失败原因的信息,包括测试在模型逻辑中是否发现了错误,或者测试本身是否无效。
  • 在数据测试结果中,您可以点击数据测试的名称,直接转到用于数据测试的 LookML,也可以点击探索查询按钮,使用数据测试中定义的查询打开“探索”。

部署到生产环境

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

  • 如果您的项目配置为高级部署模式,Android Studio 将提示您将更改合并到主分支。合并提交后,具有 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 不会提示开发者将其更改部署到生产环境。而是会提示开发者将其变更合并到生产分支中。之后,您只能通过以下方式部署更改:

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

检查更改的影响

向组织提供更改后,您可以使用内容验证来确保自己未使任何信息中心或已保存的样式失效。如果您有问题,您将有机会进行修复。

处理典型问题

创建模型时,您可能需要执行以下操作:

  • 放弃您的更改

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

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

    如果您有多个开发者负责您的数据模型,Git 通常会处理这种情况。不过,Git 有时需要人工解决合并冲突

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

还原未提交的更改

个人开发分支上执行操作时,如果您不想部署已保存的更改,可以将其还原。您可以还原项目中所有文件的所有未提交更改,也可以还原单个文件中的更改。

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

  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. 保存文件,然后对标记为合并冲突的任何其他文件重复上述步骤。

    提示:请在项目中搜索各个合并标记,以确认您已解决所有冲突并删除所有合并标记。请务必移除 LookML 文件中的所有合并标记实例。这些标记会导致解析错误,阻止用户浏览您的数据。

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

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

Git 垃圾回收

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

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