ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Gel `branch rebase` 详解:基于目标分支重建当前分支的数据库迁移工作流

Gel `branch rebase` 详解:基于目标分支重建当前分支的数据库迁移工作流 数据库图数据库关系型数据库【免费下载链接】edgedbGel supercharges Postgres with a modern data model, graph queries, Auth AI solutions, and much more.项目地址https://gitcode.com/gh_mirrors/ed/edgedb点击查看免费下载导读gel branch rebase是 Gel 分支管理命令组gel branch中的核心命令之一用于以目标分支为基础、叠加当前分支上的新迁移来重建当前分支从而让特性分支与主线分支在迁移历史上重新对齐。本文基于 gel_branch_rebase.rst 参考文档展开并结合仓库中的 迁移指南 与 分支入门指南 剖析其底层实现机制。读完本文你将掌握该命令的完整语义、参数用法、与git rebase配对的实战流程以及它为快速合并fast-forward merge铺路的设计原理。命令概览与语法gel branch rebase在当前连接的 Gel 实例上执行其 synopsis 如下gel branch rebase [options] namename目标分支的名称。命令会以该目标分支为基础重新应用当前分支上的新迁移生成重建后的当前分支。options用于指定连接目标的选项。该命令运行在它连接到的 Gel 实例上连接目标的指定方式请参考 connection options连接选项 所指向的 CLI 连接选项文档。从命令组定位来看gel branch rebase属于 gel branch 命令组 的八个子命令之一create / drop / list / merge / rebase / rename / switch / wipe该组用于分支的创建、销毁、罗列、合并、重建、重命名、切换与清空。核心语义Schema、迁移与数据三者如何取舍参考文档给出了一段关键说明原文 note当执行 rebase 时目标分支的数据会被保留。也就是说如果你切换到feature分支并运行gel branch rebase main最终你会得到一个schema 来自main、新增迁移来自feature、数据来自main的分支。这句话需要仔细拆解——它与branch merge恰好形成镜像操作当前分支目标分支结果gel branch rebase main在feature上执行feature新迁移mainschema 数据schema 与数据来自main叠加feature的新迁移gel branch merge feature在main上执行mainschema 数据feature新迁移schema 与数据来自main叠加feature的新迁移可以看到两种操作最终都得到“目标分支的 schema/数据 当前分支的新迁移”区别只在于操作后哪个分支存续merge原地演进当前分支rebase则是用重建结果替换当前分支。需要强调的是“数据来自目标分支”意味着 rebase不是把当前分支的数据搬运过去——当前分支上那些不在目标分支迁移历史中的数据修改不会随重建保留。这一点对数据敏感的场景例如在feature上写入了仅供测试的数据非常重要必要时应在 rebase 前先备份或导出相关数据。底层机制一条命令背后的四步操作参考文档将底层原理的详细拆解指向 迁移指南中的 How rebasing works 一节。gel branch rebase main看似只有一条命令实则完成了相当复杂的工作其内部流程为克隆目标分支CLI 先把main分支连同其数据克隆到一个临时分支记为temp。对比迁移历史内省temp与feature两个分支的迁移历史migration history确定二者在迁移链上的分叉点divergence。应用分叉迁移把feature分支上所有分叉的divergent迁移逐个应用apply到temp分支之上。替换分支若上述操作全部成功则删除feature分支并将temp重命名为feature。通过这四步feature的迁移链被“移植”到了main的最新 schema 之上。这一步成功后后续的合并就变成了纯粹的快速前进fast-forward正如迁移指南所述With the deceptively complicated rebase completed with just that single command, youve stacked the dominoes perfectly for your merge to succeed!一条看似简单实则复杂的 rebase 命令已为你的合并成功完美铺好了多米诺骨牌。从数据模型视角看Gel 的分支branches与 PostgreSQL 的数据库databases一一对应并直接映射见 branches.rst。第 1 步的“克隆分支含数据”在底层 DDL 上等价于create data branch new from old创建时复制源分支的 schema 与数据第 4 步的“删除并重命名”则对应drop branch与alter branch … rename to …。如果想在 REPL 中手动复现 rebase 的语义可以按此顺序组合使用这些 DDL 语句但建议优先使用 CLI 命令因为它会帮你完成迁移历史的对比与重放。实战工作流与 Git 分支配对使用gel branch rebase的典型用法是与 VCS以 Git 为例的特性分支协作。仓库中的 分支入门指南 给出了完整的五步流程其中 rebase 是第 4 步1. 创建特性分支VCS Gel 同步创建$ git switch -c feature # 或者 git checkout -b feature $ gel branch create feature Creating branch feature... OK: CREATE BRANCH $ gel branch switch feature Switching from main to feature也可以一步完成 Gel 侧的创建并切换gel branch switch -c feature。2. 开发特性编写代码并做特性所需的 schema 修改通过gel migration create/gel migrate生成并应用迁移。3. 拉取主线变更可选步骤切回main代码分支执行git pull若拉取的内容包含 schema 变更则切回main数据库分支并执行gel migrate应用新 schema。提示如果确认main代码分支是最新的、且其中的迁移都已应用到main数据库分支第 3 步可以跳过相应地第 4 步也可跳过。4. 在feature上执行 rebase本文核心先在 VCS 侧对齐代码再对齐数据库。$ git rebase main $ gel branch rebase main此时 Gel 侧完成上文所述的四步重建以main为基础、叠加feature的新迁移、保留main的数据。5. 合并回主线$ git switch main git merge feature $ gel branch switch main Switching from feature to main $ gel branch merge feature由于第 4 步已经让feature的迁移链以main为基第 5 步的gel branch merge feature就是一次无冲突的快速前进合并。关于 merge 的细节可参阅 gel_branch_merge.rstmerge 采用 fast-forward 策略不做冲突解决因此“如果你想合并但可能存在冲突应先从目标分支执行gel branch rebase再合并”——这正是 rebase 在整个分支生命周期中的价值所在在合并前提前消解迁移链分歧。该工作流在迁移指南的 Branches 一节 中被总结为create → 开发 → 拉取 main 变更 → rebase → merge且特别说明 branches 是开发新特性或原型实验性功能时隔离 schema 变更的利器——即使这些特性最终不会发布也可以随时 merge 或 drop 而不影响主线 schema。选项与连接目标gel branch rebase的唯一位置参数是目标分支名name即“以哪个分支为基底重建当前分支”。除此之外命令的可用选项主要来自 CLI 通用的连接参数指定实例--instance name或在项目目录下自动使用项目实例指定用户/数据库/端口/TLS 等连接细节使用 connection options 中列出的通用连接选项。由于命令运行在“当前连接到的实例”上rebase 只能作用于同一实例内的分支跨实例的迁移对齐不在该命令职责范围内。边界情况与使用建议综合参考文档与相关源码文档使用gel branch rebase时有几点值得注意数据以目标分支为准rebase 保留的是目标分支的数据当前分支上非迁移产生的数据变化不会保留。执行前请确认当前分支是否有需要留存的数据。为合并铺路rebase 的典型前置场景是“main有新迁移、feature也想合并回main”。先在feature上 rebase可以让随后的branch merge变为快速前进避免冲突。与迁移纪律配合Gel 默认在完成迁移流程后禁止裸 DDLallow_bare_ddl默认NeverAllowschema 变更应通过gel migration create/gel migrate纳入迁移历史——因为 rebase 的迁移对比与重放完全依赖规范的迁移历史绕过迁移体系的手工 DDL 会破坏这一前提详见迁移指南中的相关讨论见 guide.rst。失败即中止底层四步流程中只有全部迁移应用成功才会执行“删除旧分支 重命名临时分支”因此失败不会留下半成品分支覆盖原分支。关联资源命令参考原文gel_branch_rebase.rst分支命令组索引gel branch 命令组底层机制详解迁移指南 · How rebasing works完整五步工作流分支入门指南合并命令对照gel_branch_merge.rst分支数据模型与底层 DDLbranches.rst赞分享数据库图数据库关系型数据库【免费下载链接】edgedbGel supercharges Postgres with a modern data model, graph queries, Auth AI solutions, and much more.项目地址https://gitcode.com/gh_mirrors/ed/edgedb点击查看免费下载相关推荐Gel/EdgeDB gel database create 命令详解创建数据库及向 gel branch create 的迁移指南Gel/EdgeDB gel database create 命令详解创建数据库及向 gel branch create 的迁移指南 gel database数据库图数据库关系型数据库Gel 分支Branches实战指南用 gel branch 构建与 Git 联动的 Schema 开发工作流Gel 分支Branches实战指南用 gel branch 构建与 Git 联动的 Schema 开发工作流 导读 本文基于 docs/intro/br数据库图数据库关系型数据库Gel CLI 命令详解gel database drop 删除数据库的完整指南与 gel branch drop 迁移方案Gel CLI 命令详解 gel database drop 删除数据库的完整指南与 gel branch drop 迁移方案 gel database dr数据库图数据库关系型数据库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表