news 2026/9/9 13:57:03

Configure GitSync(ToolJet 工作区 Git 同步配置)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Configure GitSync(ToolJet 工作区 Git 同步配置)

Configure GitSync(ToolJet 工作区 Git 同步配置)

【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet

将你的 ToolJet 应用与 Git 仓库连接起来,为内部工具、仪表盘和业务应用带来可靠的版本控制、跨环境迁移与自动备份能力。本文聚焦 GitSync 的配置环节,以一个 GitHub 仓库为示例,逐步讲解从创建仓库、生成 SSH 密钥、部署 Deploy Key 到完成连接验证的完整流程,并说明如何通过环境变量把 GitSync 切换到自定义分支。

ToolJet 的工作区应用、数据源与查询定义都保存在服务端数据库中。GitSync 的本质,是将一个工作区配置同步到某个 Git 仓库,把应用的定义(definition)以文本形式落盘到 Git,从而实现版本追踪、跨实例迁移(例如从开发环境推到仓库、再在预发/生产实例上拉回)以及应用备份。GitSync 的更多用途可参考 GitSync Overview。

GitSync 是 ToolJet 的付费功能(在 ToolJet Cloud 与 EE 自托管版本中可用)。本节所讲解的“Configure GitSync”指工作区级别的仓库连接配置,其对应的源码位于 server/src/modules/git-sync 模块,涉及的数据库实体为organization_git_ssh(每工作区一条 SSH 仓库配置记录)与organization_git_sync

配置前的准备

在开始配置之前,先确认你已具备以下条件:

  • 管理员(Admin)角色:GitSync 的配置入口位于 Workspace settings,只有管理员可以操作。
  • 一个 Git 仓库:可以是 GitHub、GitLab、Gitea 等遵循标准 Git 协议的平台(云托管或自托管均可)。支持的其他仓库管理器配置方式见 SSH Configuration for Git Repo Manager。
  • 自托管实例的 .env 可访问权限:仅当你要配置 GitSync 使用非默认分支时需要(见本文「配置自定义分支」一节)。

ToolJet 与仓库之间的通信使用SSH 协议:ToolJet 服务端生成一对 SSH 密钥,你把公钥以 Deploy Key 的形式部署到 Git 仓库中,随后 ToolJet 通过 SSH URL 对仓库进行读写。从源码结构看,Git 同步模块按 Provider 拆分实现,见 server/src/modules/git-sync/AGENTS.md:providers/github-sshproviders/github-httpsproviders/gitlab各自承担配置的 CRUD 与连接测试,其中 SSH 方式的 Provider 内部使用ssh-keygen生成 ed25519/rsa 密钥。

在 ToolJet 中配置 GitSync(以 GitHub 为例)

完整流程分为“准备仓库 → 生成 SSH 密钥 → 部署公钥 → 完成连接”四个阶段,下面按官方推荐的执行顺序逐步展开。

第 1 步:创建一个新仓库(或使用已有仓库)

在 GitHub 上创建一个新的仓库,公开或私有均可,也可以直接使用已有仓库。有一个关键要求:仓库应为空(empty),且默认分支名最好为master。ToolJet 的 GitSync 默认与 master 分支同步,如果仓库默认分支不是 master,请按本文「配置自定义分支」一节处理。

提示:为什么要求 master?这与 ToolJet 服务端的默认分支约定有关:在迁移脚本 server/data-migrations/1754048735123-MigrateSSHBranchColumnData.ts 中可以看到,未显式配置自定义分支时,organization_git_ssh表的git_branch字段会被统一回填为master。因此让仓库默认分支与 master 保持一致,可以避免后续 Pull/Push 时出现分支不匹配。

新建仓库后 GitHub 会展示一个包含 SSH URL 的引导界面。

第 2 步:获取仓库的 SSH URL

  • 新建仓库:仓库创建完成后,GitHub 展示的界面中直接提供 SSH URL。
  • 已有仓库:点击仓库页面的Code按钮,切换到SSH标签页即可复制 SSH URL。

SSH URL 形如git@github.com:your-org/your-repo.git。这个 URL 与 HTTPS URL 不同,它专用于 SSH 认证,下一步配置中需要将完整的 SSH URL(而非https://github.com/...)填入 ToolJet。

如果是 GitLab / Gitea 等其他仓库管理器,SSH URL 的获取方式不同,详见 SSH Configuration for Git Repo Manager(GitLab 通过Clone → SSH、Gitea 在仓库创建后的界面直接展示)。

第 3 步:进入 ToolJet 的 Configure git 页面

在 ToolJet 中进入Workspace settings,点击左侧的Configure git标签页。

对于自托管部署,该页面的 URL 通常形如:

https://app.corp.com/nexus/workspace-settings/configure-git

其中app.corp.com是你自托管 ToolJet 的域名。Configure git 页面即 GitSync 连接配置的 UI 入口,对应服务端OrganizationGitCreateDto等配置 DTO(见 server/src/dto/organization_git.dto.ts),后端会接收并校验gitUrlgitType等字段。

第 4 步:填写 Git repo URL

Git repo URL字段中粘贴第 2 步获取到的 SSH URL。例如:

git@github.com:example-org/tooljet-apps.git

第 5 步:生成 SSH 密钥

点击Generate SSH key按钮,ToolJet 会为你生成一对新的 SSH 密钥,并展示需要部署到 Git 仓库的公钥。请复制这份公钥——它会用于 ToolJet 与仓库之间的认证。

ToolJet 支持生成两种类型的 SSH 密钥:

密钥类型算法说明推荐场景
ED25519安全且高效的现代算法,GitHub、GitLab 官方推荐使用大多数场景下的首选
RSA相对较老的算法个别对 RSA 有强制要求的平台,例如 Bitbucket 官方推荐使用

从服务端校验逻辑看,keyType仅允许取值ed25519rsa(见 server/src/modules/git-sync/dto/index.ts 与 server/src/dto/organization_git.dto.ts),与界面上的两个选项一一对应;仓库侧 Provider 实现(github-ssh)会用ssh-keygen以所选类型生成密钥对。

第 6~10 步:在 GitHub 上部署 SSH 公钥(Deploy Key)

拿到 ToolJet 生成的公钥后,回到 GitHub 仓库完成部署:

  1. 进入该仓库的Settings标签页,点击左侧Deploy keys,再点击Add deploy key
  2. Title字段为该密钥起一个便于识别的标题(例如tooljet-gitsync)。
  3. 将第 5 步复制的 SSH 公钥粘贴到Key字段。
  4. 勾选Allow write access复选框——当你要用 GitSync向 Git 推送(Push)变更时必须勾选;如果只打算用于从 Git 拉取(Pull)变更,则可以不勾选。推、拉两种工作方式的详细说明分别见 push changes to Git 与 pulling changes from Git。
  5. 点击Add key完成部署。

GitLab / Gitea 上部署密钥的方式不同:GitLab 既支持在用户级添加 SSH Key(对所有仓库生效),也支持在指定仓库添加 Deploy Key;Gitea 则在仓库Settings → Deploy keys中操作。具体步骤见 SSH Configuration for Git Repo Manager。

第 11 步:Finalize setup 验证连接

公钥部署完成后,回到 ToolJet 的Configure git页面,点击Finalize setup按钮。此时 ToolJet 会使用配置的 SSH URL 与部署的密钥对仓库发起一次连接测试:

  • 如果 SSH 密钥配置正确,页面会显示成功信息,表明 ToolJet 已能与该仓库建立 SSH 通信。
  • 如果提示失败,请依次检查:SSH URL 是否为正确的 SSH(而非 HTTPS)格式、公钥是否完整粘贴、是否勾选了合适的写权限、仓库是否为空/分支名是否符合预期。

该“测试连接”行为在服务端由各 Provider 的testConnection实现(通过 simple-git 执行真实的 SSH 操作),配置完成后 ToolJet 对仓库的读写(如 pull.md 的拉取与 push.md 的提交推送)都会复用同一组 SSH 凭据。

在自定义分支上配置 GitSync

默认情况下,GitSync 面向仓库的master分支工作。但从v3.5.3-ee-lts版本开始,ToolJet 支持为 GitSync 配置自定义分支。

使用该能力前需要了解以下限制与约定:

  • 仅自托管版本可用:自定义分支功能只在 ToolJet Self-Hosted 版本中提供(Cloud 版不支持)。
  • 实例级配置:自定义分支通过实例的环境变量配置,而不是在工作区 UI 中逐工作区选择。
  • 所有工作区共享同一分支:不同工作区可以连接不同的仓库,但.env中设置的自定义分支必须存在于所有已配置的仓库中,否则相应工作区的 GitSync 无法正常工作。也就是说,.env里指定的分支会对实例内所有启用 GitSync 的工作区生效。

设置方法

在 ToolJet 实例的.env文件中加入以下环境变量:

GITSYNC_TARGET_BRANCH=branch-name

branch-name替换为你希望 GitSync 使用的目标分支名。配置完成后,重启 ToolJet 服务使环境变量生效。

服务端如何读取该变量

GITSYNC_TARGET_BRANCH的读取逻辑体现在迁移脚本 server/data-migrations/1754048735123-MigrateSSHBranchColumnData.ts 中,其行为可以归纳为:

  1. 脚本会同时读取进程环境变量与该实例的.env文件内容(通过dotenv解析,NODE_ENV决定配置文件路径)。
  2. GITSYNC_TARGET_BRANCH存在且不等于master,则把实例内所有工作区的organization_git_ssh.git_branch更新为该分支名。
  3. 否则(未配置或配置为master),全部回填为master——这也与“默认使用 master 分支”的行为一致。

也就是说,该环境变量决定的是 GitSync 仓库连接的目标分支,它会被写入工作区的 Git 配置中,供后续 Pull/Push 使用。

对已有 GitSync 用户的建议

已经在使用 GitSync 的用户如果希望切换到自定义 Git 分支,请按以下顺序操作,确保一切顺畅:

  1. 先在 Git 仓库管理器中从 master 分支新建一个自定义分支(保证历史与现有 master 内容一致)。
  2. 再把该分支名配置到.env文件的GITSYNC_TARGET_BRANCH中并重启服务。
  3. 之后 GitSync 的 Pull / Push 操作都会以该自定义分支为目标工作。

这样做可以避免分支缺失或内容不一致导致的同步失败。

相关文档

  • GitSync Overview:GitSync 的总体能力、适用场景(应用迁移与备份)
  • SSH Configuration for Git Repo Manager:GitLab、Gitea 等其他仓库管理器的 SSH URL 获取与密钥部署
  • push changes to Git:把应用变更推送到 Git 仓库
  • pulling changes from Git:从 Git 仓库拉取应用变更
  • delete GitSync:移除已有 GitSync 连接配置
  • 相关源码:git-sync 模块、Git 配置 DTO、SSH 分支迁移脚本

【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 13:55:11

SRResCycGAN真实图像超分:循环一致性GAN与残差卷积网络工程实践

简介:SRResCycGAN是ECCVW AIM2020真实图像超分辨率挑战赛赛道3的官方PyTorch实现。项目针对真实场景中低分辨率图像退化过程不符合双三次降采样假设的问题,借用CycleGAN思路构建深度循环生成对抗网络,保持LR与HR域间分布一致性,实…

作者头像 李华
网站建设 2026/9/9 13:54:44

Flask、Django、FastAPI、Tornado:Python Web框架选型与实战

任何人用Python写后端,迟早都会在Flask、Django、FastAPI、Tornado这四个名字里纠结一次。我在技术社区潜水多年,见过为选型开会吵三天的团队,也见过拍脑袋选了Django之后把接口开发周期拖到崩溃的小组;还有朋友用FastAPI重写旧接…

作者头像 李华
网站建设 2026/9/9 13:54:15

STM32基于I2C驱动TM1650数码管:从寄存器到调试实践

简介:面向STM32嵌入式开发者与单片机初学者的TM1650数码管驱动资源,适用于各类基于STM32的显示需求,解决LED显示模块快速集成问题。代码包含完善的驱动层实现,覆盖GPIO初始化、串行通信时序控制、命令与数据写入等核心环节&#x…

作者头像 李华
网站建设 2026/9/9 13:53:55

安卓手机目录结构全解析

从 /data/data 到 Play Asset Delivery,一个射击手游要放东西的地方全在这 开场:一次真实的线上事故 某射击手游上线第三天,客服工单里出现一批诡异反馈: “我昨天更新完的新赛季地图,今天进游戏又让我下一遍。” “第三次了,每次都要重下 800MB。” 排查两天,定位到一…

作者头像 李华
网站建设 2026/9/9 13:52:51

PDFium二次开发实战:黑图排查与OCR组件安装指南

简介:福昕PDFium是谷歌开源PDF引擎与福昕软件核心技术结合的产物,面向需要在应用中集成PDF阅读、渲染与编辑能力的C开发者。资源包共1230个文件,压缩后仅10.55MB,核心由564个h头文件、308个c文件和283个cpp文件组成,并…

作者头像 李华