推送与拉取#
当您的 n8n 实例连接到 Git 仓库时,需要保持工作内容与 Git 同步。
本文档假设您已熟悉 Git 的基本概念和术语。如需了解 n8n 如何与 Git 协同工作,请参阅 Git 与 n8n。
/// 注意 | 建议:不要向同一个 n8n 实例同时执行推送和拉取操作 您可以将工作从一个实例推送到分支,也可以拉取到同一个实例。但 n8n 不建议这样做。为了减少合并冲突和覆盖工作的风险,请尽量创建一个单向的工作流程:要么推送到 Git,要么从 Git 拉取,但不要同时进行双向操作。 ///
获取他人工作内容#
受限功能
并非所有用户都能从 Git 获取变更。您必须是 n8n 实例所有者或管理员才能推送或拉取变更。
要从 Git 拉取工作内容,请在主菜单中选择 Pull 。
n8n 可能会显示关于覆盖本地变更的警告。选择 Pull and override 即可用 Git 中的内容覆盖您的本地工作。
当变更包含新的变量或凭据存根时,n8n 会通知您需要在使用这些项目前填充其值。
已删除资源的处理方式
当工作流、凭据、变量和标签从仓库中删除时,这些资源的本地版本不会自动删除。相反,当您拉取仓库变更时,n8n 会通知您有关过时资源的信息,并询问是否要删除它们。
拉取操作可能导致工作流和凭据所有者变更#
当从 Git 拉取内容到 n8n 实例时,n8n 会尝试将工作流和凭据分配给匹配的用户或项目。
如果原始所有者是用户: - 若相同所有者(匹配的邮箱)在两个实例上都存在,则保持所有者不变 - 若原始所有者在新实例上不存在,n8n 会将执行拉取操作的用户设为工作流所有者
如果原始所有者是项目: - n8n 会尝试将原始项目名称与新实例上的项目名称匹配 - 若无匹配项目存在,n8n 会创建一个同名新项目,将当前用户设为项目所有者,并将工作流和凭据导入该项目
拉取操作可能导致短暂服务中断#
如果向活跃工作流拉取变更,n8n 会在拉取过程中将工作流设为非活跃状态,随后重新激活。这可能导致工作流有几秒钟的停机时间。
将工作内容推送至 Git#
受限功能
普通用户无法推送工作内容至 Git。您必须是 n8n 实例所有者、管理员或项目所有者才能执行此操作。
要将工作内容推送至 Git:
-
在主菜单中选择 Push(推送)
。
-
在 Commit and push changes(提交并推送更改)弹窗中,选择要推送的工作流。您可以按状态(新增、修改、删除)筛选并搜索工作流。n8n 会自动推送标签、变量和凭据存根。
- 输入提交信息。这应该是对所做更改的一句话描述。
- 选择 Commit and Push(提交并推送)。n8n 会将工作内容发送至 Git,并在完成后显示成功消息。
提交内容包含#
n8n 会向 Git 提交以下内容: * 工作流(包含其标签和工作流所有者的邮箱地址),可选择推送哪些工作流 * 凭据存根(ID、名称、类型) * 变量存根(ID 和名称) * 项目 * 文件夹
合并行为与冲突处理#
n8n 的版本控制实现采用预设策略。它会自动解决凭据和变量的合并冲突,但无法检测工作流上的冲突。
工作流管理#
在使用推送(push)或拉取(pull)操作时,您需要明确告知n8n如何处理工作流。Git仓库将作为唯一可信源。
当执行拉取操作时,系统可能会警告您本地工作流副本与Git版本存在差异。如果确认接受,本地副本将被覆盖。请谨慎操作,避免拉取时丢失重要修改。
当执行推送操作时,您的本地工作流将覆盖Git仓库中的版本。请确保您拥有最新版本,否则可能会覆盖近期变更。
为避免上述问题,您应在完成工作流修改后立即推送变更至Git仓库。这样再进行拉取操作就是安全的。
防止数据丢失的建议:
- 设计版本控制流程时确保工作流单向流动。例如:在开发环境进行编辑→推送至Git→再拉取到生产环境。避免在生产环境直接编辑并推送。
- 不要推送所有工作流。仅选择您需要的部分。
- 谨慎对待手动修改Git仓库中的文件。
凭证、变量与工作流标签#
凭证和变量不会出现合并冲突问题,因为 n8n 会自动选择保留的版本。
拉取操作时:
- 如果标签、变量或凭证不存在,n8n 会创建它
- 如果标签、变量或凭证已存在,n8n 不会更新它,除非:
- 您通过 API 或外部方式设置了变量值,新值将覆盖现有值
- 凭证名称已变更,n8n 会采用 Git 中的版本
- 标签名称已变更,n8n 会更新标签名称。重命名标签时需谨慎,因为标签名称具有唯一性,在拉取过程中可能导致数据库的唯一性约束问题
推送操作时:
- n8n 会覆盖整个变量和标签文件
- 如果凭证已存在,n8n 会用变更覆盖它,但这些变更不会在拉取时应用到现有凭证上
使用外部密钥库管理凭证
如果需要在不同的 n8n 环境中使用不同的凭证,请使用外部密钥管理。