我正在将 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 设置为?
在寻找相同的东西时偶然发现了这个答案。
您可以通过设置
THOR_MERGE
环境变量来启动 vscode diff 工具,如下所示:
THOR_MERGE="code -d $1 $2"
这是假设您的 PATH 中有代码,您可以按照此处的说明进行设置。
XCode 似乎包含 /usr/bin/opendiff,这是一个启动 FileMerge.app 的二进制文件。所以我能够:
THOR_MERGE=opendiff rails app:update
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 应用程序的路径都会更改。
THOR_MERGE=kdiff3 rails app:update
opendiff
/ meld
/ kdiff
等对于 vscode:
THOR_MERGE=code bin/rails app:update