推送和拉取#
如果您的 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推送工作:
-
在主菜单中选择推送
。1 2 3 4 5 6 7 8 9 10
??? Details "查看截图" <figure markdown>  <figcaption>菜单关闭时的拉取和推送按钮</figcaption> </figure> <figure markdown>  <figcaption>菜单打开时的拉取和推送按钮</figcaption> </figure> -
在 Commit and push changes 提交并推送更改 模态框中,选择要推送的工作流。您可以按状态(new 新建、modified 已修改、deleted 已删除)筛选并搜索工作流。n8n 会自动推送标签,以及变量和凭据存根。
n8n 推送的是工作流当前已保存的版本,而不是已发布的版本。你还需要在远端服务器上单独发布对应的版本。
-
输入提交消息。这应该是你正在进行的更改的一句简要描述。
- 选择 Commit and Push 提交并推送。n8n 将工作发送到 Git,并在完成时显示成功消息。
什么会被提交#
n8n 将以下内容提交到 Git:
- 工作流,包括它们的标签和工作流所有者的电子邮件地址。你可以选择要推送的工作流。
- 凭据存根 - ID、名称和类型。仅当其他字段是表达式时才包含它们。你可以选择要推送的凭据。
- 变量存根(ID 和名称)
- 项目
- 文件夹
Merge behaviors and conflicts 合并行为和冲突#
n8n 的源代码控制实现是有主见的。它会自动解决凭据和变量的合并冲突。n8n 无法检测工作流上的冲突。
Workflows 工作流#
在推送或拉取时,你必须明确告诉 n8n 如何处理工作流。Git 仓库充当真实来源。
拉取时,你可能会收到警告,提示你的工作流本地副本与 Git 不同,如果你接受,你的本地副本将被覆盖。拉取时要小心不要丢失相关更改。
推送时,你的本地工作流将覆盖 Git 中的内容,因此请确保你拥有最新版本,否则你可能会覆盖最近的更改。
为了防止上述问题,你应该在完成工作流工作后立即推送更改。然后拉取就是安全的。
为了避免丢失数据:
- 设计你的源代码控制设置,使工作流单向流动。例如,在开发实例上进行编辑,推送到 Git,然后拉取到生产环境。不要在生产实例上进行编辑并推送它们。
- 不要推送所有工作流。选择你需要的工作流。
- 谨慎手动编辑 Git 仓库中的文件。
Credentials, variables and workflow tags 凭据、变量和工作流标签#
凭据和变量不会有合并问题,因为 n8n 会选择要保留的版本。
拉取时:
- 如果标签、变量或凭据不存在,n8n 会创建它。
- 如果标签、变量或凭据已存在,n8n 不会更新它,除非:
- 你使用 API 或外部设置变量的值。新值会覆盖任何现有值。
- 凭据名称已更改。n8n 使用 Git 中的版本。
- 标签的名称已更改。n8n 更新标签名称。重命名标签时要小心,因为标签名称是唯一的,这可能会在拉取过程中导致数据库唯一性问题。
推送时:
- n8n 覆盖整个变量和标签文件。
- 如果凭据已存在,n8n 会用更改覆盖它,但不会在拉取时将这些更改应用于现有凭据。
Manage credentials with an external secrets vault 使用外部密钥保管库管理凭据
如果你需要在不同的 n8n 环境中使用不同的凭据,请使用外部密钥。

