循序渐进 · 教学 · 函数(八)

分支上的函数开发

函数可以在分支(branch)上开发、发布和消费,这样改动不会直接影响主线。这一篇讲分支开发流程、冲突解决与合并。

全部目录 ← 上一篇 分支上的函数开发 下一篇 →
本文来源 · Source 内容整理自 Palantir Foundry 官方文档:
https://www.palantir.com/docs/foundry/functions/branching-functions/
原始标题:Functions > Branching functions

先记住这几条

① 分支隔离改动
在分支上开发和发布函数,主线不受影响。
② 支持 v1 / v2 / AIP Logic
TypeScript v1、v2 与 AIP Logic 函数支持分支。
③ 冲突要 rebase 解决
分支落后于主线时,用 rebase 处理冲突。
④ 合并回主线才生效
分支上的函数最终要合并,才能进入正式使用。
0

写在前面

你可以在全局分支(global branch)上开发、发布并使用函数。目前 TypeScript v1、TypeScript v2 和 AIP Logic 函数支持此特性。

你不能修改分支上的 Python 函数。若要在合并进 main 之前测试,可引用分支上的特定函数版本。函数代码只能使用存在于 main 上的 schema。

1

在分支上开发

在分支上开发

要点:分支上的开发、发布、消费流程与主线一致,但作用域隔离。

在全局分支上开发 TypeScript 函数之前,请确保你的仓库满足以下要求。要使用 TypeScript v1 的 Global Branching,请将 functions-typescript 子模板升级到 0.903.0 或更高版本;具体步骤参见仓库升级文档。要使用 TypeScript v2 的 Global Branching,请将 typescript-functions 父模板升级到 0.1299.0 或更高版本,并启用本地 Ontology SDK

你可以开发一个依赖全局分支上资源改动的函数,例如新建或修改过的 Ontology 实体。

在分支上开发新函数。
在分支上开发新函数。

就绪后,用一个版本目标(version target)发布你的函数——即在全局分支合并时发布到 main 的稳定版本。在分支开发期间,函数以不稳定的预览版本形式发布。

在分支上发布函数。
在分支上发布函数。

成功在分支上发布函数后,你就可以在 Workshop、AIP Logic 和函数支撑的动作中使用分支上的新函数版本。该版本会打上 Branched pre-release(分支预发布) 标签。分支上发布的函数在其他分支(包括 main)上不可访问。

在 Workshop 中使用分支函数。
在 Workshop 中使用分支函数。
在动作中使用分支函数。
在动作中使用分支函数。

目前在 TypeScript v1 仓库中,无法依赖查询函数的分支版本。

在分支上持续开发时,你可以不断地往同一个版本目标发布函数版本。只要版本目标保持不变,任何使用你函数的资源都会自动拉取最新发布的版本。这让你无需在每次发布后手动更新函数引用,即可快速迭代。

如果分支上的版本目标发生变化,你必须把所有在分支上使用了旧版本的函数依赖方更新到新版本目标。这也会以检查项的形式显示出来。

2

冲突解决与 rebase

冲突解决与 rebase

要点:主线有更新时,把分支 rebase 上去解决冲突。

在分支上开发时,你不会自动收到发布到 main 的更新函数版本。这能防止 main 的开发干扰你的分支工作。如果 main 上有更新的版本可用,你会在函数版本选择器和 Ontology Manager 中看到通知。随后你可以对函数版本执行 rebase(变基),以拉取 main 上的所有更新版本。

变基函数对话框。
变基函数对话框。

如果你的版本目标在开发期间被发布到 main,你必须在合并前选择一个新的版本目标。一旦选定,更新所有依赖方以使用新的版本目标。

3

合并回主线

合并回主线

要点:验证通过后合并,函数才算正式进入主线。

合并全局分支时,被修改的函数会以稳定版本目标发布到 main。使用分支上所发布版本的资源,会自动开始使用合并时发布到 main 的新稳定版本。

Foundry 只会把你的版本目标合并进 main,不会合并在分支上发布的其他版本。这些版本在分支合并后不会存在于 main 上。

延伸阅读 · 相关页面

按主题横向跳转,不必顺着目录一篇篇读。

常见问题速答 · FAQ

关于「分支上的函数开发」,读者最常问的几个问题。

在分支上开发是什么?
分支上的开发、发布、消费流程与主线一致,但作用域隔离。在全局分支上开发 TypeScript 函数之前,请确保你的仓库满足以下要求。要使用 TypeScript v1 的 Global Branching,请将 functions-typescript 子模板…
冲突解决与 rebase是什么?
主线有更新时,把分支 rebase 上去解决冲突。在分支上开发时,你不会自动收到发布到 main 的更新函数版本。这能防止 main 的开发干扰你的分支工作。
合并回主线是什么?
验证通过后合并,函数才算正式进入主线。合并全局分支时,被修改的函数会以稳定版本目标发布到 main。使用分支上所发布版本的资源,会自动开始使用合并时发布到 main 的新稳定版本。