Rails 5:如何设置用于 Rails 应用程序的合并工具:更新?

问题描述 投票:0回答:5

我正在将 Rails 5.2.4.1 应用程序升级到 Rails 6。我想合并一些配置文件,而不是从旧文件的副本中手动添加信息。

我第一次输入 m 合并文件时收到以下消息。

Please specify merge tool to `THOR_MERGE` env.

我进行了搜索并找到了这篇博客文章。此人在谷歌搜索后找到的文件夹在我的 Mac 电脑上不存在。

FileMerge 不存在并且 DiffMerge 已经很老了。我还没有找到任何有关使用

rails app:update
的信息。

当前使用哪些 Mac 合并工具,我可以将环境变量 THOR_MERGE 设置为?

ruby-on-rails macos ruby-on-rails-5 mergetool app-update
5个回答
24
投票

在寻找相同的东西时偶然发现了这个答案。

您可以通过设置

THOR_MERGE
环境变量来启动 vscode diff 工具,如下所示:

THOR_MERGE="code -d $1 $2"

这是假设您的 PATH 中有代码,您可以按照此处的说明进行设置。


8
投票

XCode 似乎包含 /usr/bin/opendiff,这是一个启动 FileMerge.app 的二进制文件。所以我能够:

THOR_MERGE=opendiff rails app:update


8
投票

RubyMine 也可以用作合并工具。为了在我的 macOS Monterey 系统上实现该功能,我在

/usr/local/bin/rubymine-merge
创建了一个新的 Bash 脚本(部分基于 JetBrains Toolbox 提供的
rubymine
脚本),代码如下:

#!/usr/bin/env bash

declare -- wait="-W"

bundle exec rubocop --server -A "$1"

open -na "$HOME/Library/Application Support/JetBrains/Toolbox/apps/RubyMine/ch-0/222.3739.56/RubyMine 2022.2 EAP.app/Contents/MacOS/rubymine" $wait --args merge "$2" "$1" "$2"

此后,我可以调用 Rails 更新脚本,如下所示:

THOR_MERGE=rubymine-merge bin/rails app:update

此功能自 2022 年 8 月中旬的 RubyMine 2022.2.1 开始运行。

Rails 更新脚本似乎要求合并工具的行为就像收到了

--wait
参数一样,因为在上次合并后,脚本会删除所有临时文件。对于 2022.2 版本的命令行脚本,将
--wait
作为命令行参数传递似乎有问题,因此我在第 3 行对
-W
进行了硬编码。

我还在第 5 行插入了对 rubocop 的调用,以便 Rails app:update 脚本的建议更改已经与该项目的标准保持一致。如果这部分不能满足您的需求,请跳过该部分。我必须使用

bundle exec rubocop
而不是
bin/rubocop
,因为 Rails app:update 脚本并不总是在项目根目录的上下文中运行。

将此脚本与 JetBrains Toolbox 生成的

/usr/local/bin/rubymine
脚本分开并不是最理想的。每次安装新版本的 RubyMine 时,实际 RubyMine 应用程序的路径都会更改。


3
投票

简单的解决方案:

THOR_MERGE=kdiff3 rails app:update

  • 或使用
    opendiff
    /
    meld
    /
    kdiff
  • 感谢@pduey(谢谢)。

0
投票

对于 vscode:

THOR_MERGE=code bin/rails app:update

© www.soinside.com 2019 - 2024. All rights reserved.