Skip to content

推送和拉取#

如果您的 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. 在主菜单中选择推送 推送图标

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    ??? Details "查看截图" 
        <figure markdown>
            ![菜单关闭时的拉取和推送按钮](/_images/source-control-environments/pull-push-menu-closed.png)
            <figcaption>菜单关闭时的拉取和推送按钮</figcaption>
        </figure>
    
        <figure markdown>
            ![菜单打开时的拉取和推送按钮](/_images/source-control-environments/pull-push-menu-open.png)
            <figcaption>菜单打开时的拉取和推送按钮</figcaption>
        </figure>
    
  2. Commit and push changes 提交并推送更改 模态框中,选择要推送的工作流。您可以按状态(new 新建、modified 已修改、deleted 已删除)筛选并搜索工作流。n8n 会自动推送标签,以及变量和凭据存根。

    n8n 推送的是工作流当前已保存的版本,而不是已发布的版本。你还需要在远端服务器上单独发布对应的版本。

  3. 输入提交消息。这应该是你正在进行的更改的一句简要描述。

  4. 选择 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 环境中使用不同的凭据,请使用外部密钥