推送与拉取#
如果您的 n8n 实例连接到一个 Git 仓库,您需要将工作内容与 Git 保持同步。 本文档假设您已具备一定的 Git 概念和术语基础。如需了解 n8n 如何与 Git 协作,请参阅 Git 与 n8n。
建议:不要向同一个 n8n 实例同时进行推送和拉取 您可以从某个实例向分支推送(push)工作内容,并从同一实例拉取(pull)内容。但 n8n 不推荐这种做法。为降低合并冲突和覆盖他人工作的风险,建议建立单向流程:即工作内容要么只推送到 Git,要么只从 Git 拉取,避免双向操作。
获取他人的工作内容#
n8n 的角色权限控制哪些用户可以拉取(fetch)变更 您必须是实例所有者(instance owner)或实例管理员(instance admin),才能从 Git 拉取变更。
要从 Git 拉取工作内容,请在主菜单中选择 Pull(拉取) !Pull icon。
查看截图 菜单关闭时的拉取和推送按钮 菜单关闭时的拉取和推送按钮 菜单打开时的拉取和推送按钮 菜单打开时的拉取和推送按钮
n8n 可能会显示警告,提示本地更改将被覆盖。请选择 Pull and override(拉取并覆盖) 以使用 Git 中的内容覆盖本地工作。
当变更包含新的变量或凭据存根(credential stubs)时,n8n 会通知您需要先为这些项目填充实际值后才能使用。
删除资源的处理方式
当工作流、凭据、变量或标签从仓库中被删除时,您本地对应的资源不会自动删除。相反,在您拉取仓库变更时,n8n 会通知您存在哪些已过时的资源,并询问是否希望将其删除。
拉取时工作流和凭据的所有者可能发生变化#
当您从 Git 向 n8n 实例拉取内容时,n8n 会尝试将工作流和凭据分配给匹配的用户或项目。
-
如果原始所有者是用户:
- 若两个实例中存在相同邮箱地址的用户,则所有者保持不变。
- 若原始所有者在新实例中不存在,n8n 将执行拉取操作的用户设为该工作流的新所有者。
-
如果原始所有者是 项目(project):
- n8n 会尝试将原始项目名称与新实例中的项目名称匹配。若无匹配项目,n8n 将创建一个同名新项目,将当前用户设为项目所有者,并将工作流和凭据导入该项目。
拉取可能导致短暂的服务中断#
如果您向正在运行的工作流拉取变更,n8n 在拉取期间会暂时将其设置为非激活状态,拉取完成后重新激活。这可能导致该工作流出现数秒的停机时间。
将您的工作推送到 Git#
n8n 的角色权限控制哪些用户可以推送变更 您必须是实例所有者、实例管理员或项目管理员(project admin),才能向 Git 推送变更。
要将工作推送到 Git,请按以下步骤操作:
-
在主菜单中选择 Push(推送) !Push icon。
查看截图 菜单关闭时的拉取和推送按钮 菜单关闭时的拉取和推送按钮 菜单打开时的拉取和推送按钮 菜单打开时的拉取和推送按钮
-
在弹出的 Commit and push changes(提交并推送变更) 对话框中,选择您要推送的工作流。您可以按状态(新建、修改、删除)过滤,也可以搜索特定工作流。n8n 会自动推送标签(tags)以及变量和凭据的存根(stubs)。
-
输入提交信息(commit message)。这应是对您所做变更的一句话简要描述。
-
点击 Commit and Push(提交并推送)。n8n 会将变更发送至 Git,并在完成后显示成功提示。
哪些内容会被提交#
n8n 会将以下内容提交到 Git:
- 工作流(Workflows),包括其标签(tags)和工作流所有者的电子邮件地址。你可以选择要推送哪些工作流。
- 凭据存根(Credential stubs,包含 ID、名称和类型)
- 变量存根(Variable stubs,包含 ID 和名称)
- 项目(Projects)
- 文件夹(Folders)
合并行为与冲突#
n8n 的源代码控制实现具有特定的设计理念。它会自动解决凭据(credentials)和变量(variables)的合并冲突,但无法检测工作流中的冲突。
工作流#
在推送或拉取时,你必须明确告知 n8n 如何处理工作流。Git 仓库被视为事实来源(source of truth)。
当你执行拉取(pull)操作时,系统可能会提示你本地的工作流副本与 Git 中的内容不同;如果你确认继续,本地副本将被覆盖。请在拉取时小心,避免丢失重要的本地更改。
当你执行推送(push)操作时,你的本地工作流将覆盖 Git 中的现有内容。因此,请确保你拥有最新版本,否则可能覆盖他人最近的修改。
为避免上述问题,建议在完成对某个工作流的编辑后立即将其推送到 Git。这样后续的拉取操作才是安全的。
为防止数据丢失,请遵循以下建议:
- 设计你的源代码控制架构时,确保工作流单向流动。例如:在开发环境实例上进行修改,推送到 Git,再从生产环境实例中拉取。不要在生产环境实例上直接修改并推送。
- 不要推送所有工作流,仅选择需要的工作流进行推送。
- 避免手动编辑 Git 仓库中的文件。
凭据、变量和工作流标签#
由于 n8n 会自动决定保留哪个版本,凭据和变量不会出现合并冲突。
在拉取(pull)时:
- 如果标签、变量或凭据不存在,n8n 将创建它们。
- 如果标签、变量或凭据已存在,n8n 不会更新它们,除非满足以下情况:
- 你通过 API 或外部方式设置了变量的值,新值将覆盖现有值。
- 凭据名称发生了变化,n8n 会采用 Git 中的版本。
- 标签名称发生了变化,n8n 将更新该标签名称。请注意:重命名标签需谨慎,因为标签名称是唯一的,在拉取过程中可能导致数据库唯一性约束问题。
在推送(push)时:
- n8n 会完全覆盖 variables 和 tags 的整个文件。
- 如果凭据已存在,n8n 会用更改内容覆盖它,但在后续拉取时不会将这些更改应用到已存在的凭据上。
使用外部密钥保管库管理凭据 如果在不同的 n8n 环境中需要使用不同的凭据,请使用 外部密钥(external secrets)。