跳转到内容

内置 Git

Restorm 项目天生就是为了存放在一个 git 仓库里。这项集成比单纯的 git commit 走得更远:它理解项目文件的格式,能在业务实体这一层解决冲突, 而不是在 YAML 的行这一层。

没有任何东西需要配置。只要打开的 .restorm 文件位于一个 git 仓库内, 相关的 git 界面就会自动启用。

Restorm 使用的是您本机的 git:不需要输入任何凭据, 应用里也不管理任何令牌。规则很简单 —— 如果 git push 在您的终端里能用,它在 Restorm 里也能用。Git 是在禁用交互提示的模式下启动的: 一个会索要密码的仓库会立即带着 git 自己的错误信息失败,而不会把界面卡住。

两个按钮,推送拉取;当有内容待发送、或者远端存在更新版本时, 按钮上会出现一个小圆点(只是一个点,从不显示数字)。

标题栏中的 Git 菜单提供同样的操作,另外还有刷新重置为服务器版本历史记录

状态栏中的 GIT 单元:刷新、推送和拉取,后两个各带一个小圆点,再往后是历史记录。“推送到仓库”提示框正处于展开状态。

推送对话框会显示一条已经写好的提交信息,它是从结构化差异中 确定性地生成的 —— 完全不经过语言模型。每一个被修改的实体 (请求、场景、文件夹、变量文件夹)占一行,绝不会每个字段一行。

  • 一个用于选择提交信息语言的选择器,与界面语言相互独立, 并带有一个可把它设为默认值的开关。
  • 一个可编辑的标题,附带一个 72 字符的参考计数器。
  • 一个多行的正文

确认后会依次执行:保存、git add、提交、推送。

Restorm 会先保存,然后再拉取并合并。

干净合并:树结构和已打开的标签页会就地刷新。

发生冲突:会打开一个四面板的冲突解决视图。

四面板的冲突解决视图:左侧是冲突列表,接着是您的版本、服务器版本 —— 存在分歧的 URL 用红框标出 —— 以及在选用您的版本后被填好的“已解决”面板。

面板内容
冲突列表处于冲突状态的实体
您的版本只读
他们的版本只读
已解决可编辑 —— 这才是最终会被写入的内容

关键之处在于:每个面板都会用该实体真正的编辑器来显示它 —— HTTP 请求用 HTTP 编辑器,场景用场景编辑器。您要做的不是在 YAML 里处理 <<<<<<< 标记,而是对比两个请求。

每一侧都有一个**“使用这个版本”按钮,而且存在分歧的字段会用红色高亮** —— 当只有一个字段不同时,面板会直接定位到相关的那个标签。

变量文件夹的 API 文档会自动解决冲突(较新的版本胜出)。

取消会执行一次 git merge --abort。如果您在解决冲突的过程中关闭了应用, 下次启动时 Restorm 会询问您是否放弃这次合并。

Restorm 会定期检查是否存在更新的版本 —— 但绝不会自行合并。 共有三个触发条件:观察到 .git 发生变化、打开一个文件, 以及一个定时器(频率在设置 ▸ Git 中设定:关闭、15 分钟、30 分钟、 1 小时、4 小时、12 小时、24 小时)。

此时会出现一条“有可用更新”的通知,并提供 Pull now 操作。

如果文件自打开以来在磁盘上发生了变化,保存操作会被拒绝, Restorm 会询问您是要重新加载还是保留您的版本

这来自格式的两项特性,详见 项目与 .restorm 文件: 一套规范化的键顺序,以及以稳定方式派生的标识符

结果就是:打开后不做任何修改再保存,不会产生任何差异; 两个人在同一位置添加同一个请求,产生的实体也能被合并逻辑正确配对。

Git ▸ 历史记录会打开一个双栏视图:左侧是带分支线的提交列表, 右侧是详情。在某个提交上打开右键菜单,即可取回那个版本。

共四个工具,需要 Pro 版:git_commit_push(两步中的第一步 —— 返回一个审阅令牌、标题、正文以及按实体划分的差异,但不写入任何东西)、 git_confirm_push(两步中的第二步 —— 如果项目在审阅之后发生了变化则会被拒绝)、 git_pullgit_resolve_conflicts

拆成两步是有意的设计:智能体不可能在没有先呈现差异的情况下完成推送。