推送和拉取#
如果您的 n8n 实例连接到 Git 仓库,您需要保持您的工作与 Git 同步。
本文档假设对 Git 概念和术语有一定的了解。有关 n8n 如何与 Git 配合工作的介绍,请参考 Git 和 n8n。
建议:不要在同一个n8n实例中推送和拉取
您可以从一个实例向分支推送工作,并拉取到同一个实例。n8n 不建议这样做。为了降低合并冲突和覆盖工作的风险,请尝试创建一个工作单向流动的流程:要么流向 Git,要么来自 Git,但不要双向。
获取其他人的工作#
n8n 角色控制哪些用户可以拉取(获取)更改
您必须是实例所有者或实例管理员才能从 git 拉取更改。
要从 Git 拉取工作,在主菜单中选择拉取 。
n8n 可能会显示关于覆盖本地更改的警告。选择拉取并覆盖以用 Git 中的内容覆盖您的本地工作。
当更改包含新的变量或凭据存根时,n8n 会通知您需要在使用这些项目之前填充值。
如何处理已删除的资源
当工作流、凭据、变量和标签从仓库中删除时,您的这些资源的本地版本不会自动删除。相反,当您拉取仓库更改时,n8n 会通知您任何过时的资源,并询问您是否要删除它们。
拉取时工作流和凭据所有者可能会更改#
当您从 Git 拉取到 n8n 实例时,n8n 会尝试将工作流和凭据分配给匹配的用户或项目。
如果原始所有者是用户:
如果两个实例上都有相同的所有者(匹配的电子邮件),所有者保持不变。如果原始所有者不在新实例上,n8n 会将执行拉取的用户设置为工作流所有者。
如果原始所有者是项目:
n8n 会尝试将原始项目名称与新实例上的项目名称匹配。如果不存在匹配的项目,n8n 会使用该名称创建新项目,将当前用户分配为项目所有者,并将工作流和凭据导入到项目中。
拉取可能导致短暂的服务中断#
如果您拉取对活动工作流的更改,n8n 会在拉取时将工作流设置为非活动状态,然后重新激活它。这可能导致工作流几秒钟的停机时间。
将您的工作发送到 Git#
n8n 角色控制哪些用户可以推送更改
您必须是实例所有者、实例管理员或项目管理员才能将更改推送到 git。
向Git推送工作:
-
在主菜单中选择推送
。
-
在提交并推送更改模态框中,选择要推送的工作流。您可以按状态(新建、已修改、已删除)筛选并搜索工作流。n8n 会自动推送标签、变量和凭据存根。
- 输入提交消息。这应该是您正在进行的更改的一句话描述。
- 选择提交并推送。n8n 将工作发送到 Git,并在完成时显示成功消息。
什么会被提交#
n8n 将以下内容提交到 Git:
- 工作流,包括它们的标签和工作流所有者的电子邮件地址。您可以选择要推送哪些工作流。
- 凭据存根(ID、名称、类型)
- 变量存根(ID 和名称)
- 项目
- 文件夹
合并行为和冲突#
n8n 的源代码控制实现是有主见的。它会自动解决凭据和变量的合并冲突。n8n 无法检测工作流上的冲突。
工作流#
在推送或拉取时,您必须明确告诉 n8n 如何处理工作流。Git 仓库充当真实来源。
拉取时,您可能会收到警告,说您的工作流本地副本与 Git 不同,如果您接受,您的本地副本将被覆盖。拉取时要小心不要丢失相关更改。
推送时,您的本地工作流将覆盖 Git 中的内容,因此请确保您拥有最新版本,否则您有覆盖最近更改的风险。
为了防止上述问题,您应该在完成工作流工作后立即将更改推送到 Git。然后拉取是安全的。
为了避免数据丢失:
- 设计您的源代码控制设置,使工作流单向流动。例如,在开发实例上进行编辑,推送到 Git,然后拉取到生产。不要在生产实例上进行编辑并推送它们。
- 不要推送所有工作流。选择您需要的。
- 谨慎手动编辑 Git 仓库中的文件。
凭据、变量和工作流标签#
凭据和变量不会有合并问题,因为 n8n 选择要保留的版本。
拉取时:
- 如果标签、变量或凭据不存在,n8n 会创建它。
- 如果标签、变量或凭据已经存在,n8n 不会更新它,除非:
- 您使用 API 或外部方式设置变量的值。新值会覆盖任何现有值。
- 凭据名称已更改。n8n 使用 Git 中的版本。
- 标签的名称已更改。n8n 更新标签名称。重命名标签时要小心,因为标签名称是唯一的,这可能在拉取过程中的唯一性方面导致数据库问题。
推送时:
- n8n 覆盖整个变量和标签文件。
- 如果凭据已经存在,n8n 会用更改覆盖它,但在拉取时不会将这些更改应用于现有凭据。
使用外部密钥保险库管理凭据
如果您需要在不同的 n8n 环境中使用不同的凭据,请使用外部密钥。