虽然不乏关于如何为 Subversion 命令行界面设置文本编辑器的信息(例如参见 here、here 和 here),但我不知道在哪里我的本地系统正在从中获取文本编辑器信息。
在我的系统上,当我执行 svn commit
时,它会打开 vim
以获取提交消息。因为这是我想要的,所以我从来没有真正考虑过。这一直很有效。然而,最近一位同事试图提交,但失败了,并显示编辑器未设置的错误。我从来没有特意设置编辑器,所以我对此很困惑。
我正在运行 Ubuntu 12.04,我已经从源代码编译并安装了 Subversion CLI 客户端版本 1.8.10。在此之前,我使用的是通过 apt-get install subversion
安装的任何 Ubuntu 的 Canonical 系统。
Using External Editors节Subversion Book说明设置文本编辑器的以下可能性:
- --editor-cmd 命令行选项
- SVN_EDITOR 环境变量
- editor-cmd 运行时配置选项
- VISUAL 环境变量
- EDITOR 环境变量
- 可能是 Subversion 库中内置的后备值(官方构建中不存在)
我调查了这些地方并没有发现默认的文本编辑器在我的电脑上是如何设置的:
- 提交时不使用
--editor-cmd
选项 SVN_EDITOR
环境变量未设置editor-cmd
既没有在我的~/.subversion/config
中设置,也没有在/etc/subversion/config
中设置。这两个文件都存在,但该行被注释掉了。VISUAL
未设置环境变量EDITOR
未设置环境变量- 我正在下载 the official repository , 所以不应该有回退。
必须有另一个地方可以设置默认值。有人知道吗?
编辑:有人建议 Subversion 可能正在调用 /usr/bin/editor
,但我同事的机器上没有设置。我发现 /usr/bin/editor
在我的系统和同事的系统上设置相同。
最佳答案
当您直接下载源代码(并构建它 - 假设您满足构建依赖项)时,您指定(或者您可以省略)默认的回退编辑器。通常源构建是在 Ubuntu 上用这样的东西完成的(假设我已经从 here 中提取/下载了颠覆 1.8.10 源):
./configure
make
sudo make install
请注意上面的 ./configure
命令没有指定任何选项。默认值将安装到前缀/usr/local 。在发出这些命令之前(在 Ubuntu 12.04 上)我运行了 sudo apt-get build-dep subversion
。然后我执行上面的命令来构建和安装。我确保不满足选项 1-5(在 OP 问题中),然后尝试将更改提交到存储库。我得到这个作为回应:
svn: E205007: Commit failed (details follow):
svn: E205007: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options
svn: E205007: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time configuration option was found
因为我没有删除官方的 Ubuntu 颠覆版本,所以我必须以 /usr/local/bin/svn
运行我的版本,以确保我使用的是我构建的版本。我本可以使用 sudo apt-get remove subversion
来删除官方的,只是为了确保。
现在,如果运行这些命令来重建源代码:
make clean
./configure --with-editor=/usr/bin/editor
make
sudo make install
应该会发现,如果不满足选项 1 到 5 并且运行此版本的颠覆,它应该默认运行 /usr/bin/editor
指向的任何内容。在 Ubuntu 上,这将取决于所使用的替代方案。
那么,当 Ubuntu 进行官方构建时,他们的后备编辑器从何而来?我在这个 link 访问了 12.04 源代码库进行颠覆。 .在右侧,我下载了 diff 文件 subversion_1.6.17dfsg-3ubuntu3.4.diff.gz .我打开了 Ubuntu 使用的 diff 文件,向下滚动你可以发现他们使用了这组 ./configure
选项(标志):
confflags := \ --prefix=/usr \ --libdir=$(libdir) \ --mandir=\$${prefix}/share/man \ --with-apr=/usr \ --with-apr-util=/usr \ --with-neon=/usr \ --with-serf=/usr \ --with-berkeley-db=:::db \ --with-sasl=/usr \ --with-editor=/usr/bin/editor \ --with-ruby-sitedir=/usr/lib/ruby \ --with-swig=/usr \ --with-kwallet \ --with-gnome-keyring
粗体条目表明他们使用 /usr/bin/editor
作为后备。
我在 Ubuntu 12.04 上从源代码构建了 subversion 1.8.10 并得到了预期的行为。这表明其中一种可能性:
- 在其中一个系统上,实际上满足了选项 1 到 5。
- 一个版本的 subversion 是使用
--with-editor
配置标志构建的(直接或间接)。回退将指向--with-editor
配置标志设置的任何内容。 - 在其中一个系统上运行了错误版本的 subversion。一种可能性是实际上正在使用 Ubuntu 上的官方 subversion。如果是这种情况,它被构建为使用
/usr/bin/editor
作为后备。 - 在您的一个系统上,您有一个指定编辑器的
svn
的别名(或等效项)。别名将在启动脚本中指定,例如~/.bashrc
、~/.bash_profile
、/etc/bash.bashrc
。
关于linux - Linux 上的 Subversion CLI 默认文本编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26170024/