【问题标题】:Subversion CLI default text editor on LinuxLinux 上的 Subversion CLI 默认文本编辑器
【发布时间】:2014-10-02 21:35:10
【问题描述】:

虽然不乏有关如何为 Subversion 命令行界面设置文本编辑器的信息(例如,参见 hereherehere),但我不知道在哪里我的本地系统正在从中获取文本编辑器信息。

在我的系统上,当我执行svn commit 时,它会打开vim 以获取提交消息。因为这是我想要的,所以我从来没有真正考虑过。这一直有效。但是,最近一位同事尝试提交,但失败并显示未设置编辑器的错误。我从来没有特意设置编辑器,所以对此我很困惑。

我正在运行 Ubuntu 12.04,并且我已经从源代码编译并安装了 Subversion CLI 客户端版本 1.8.10。在此之前,我使用的是使用apt-get install subversion 安装的任何 Ubuntu 规范系统。

Subversion BookUsing External Editors 部分说明了设置文本编辑器的以下可能性:

  1. --editor-cmd 命令行选项
  2. SVN_EDITOR 环境变量
  3. editor-cmd 运行时配置选项
  4. VISUAL 环境变量
  5. EDITOR 环境变量
  6. 可能是 Subversion 库中内置的后备值(官方版本中不存在)

我调查了这些地方,并没有发现我的电脑上的默认文本编辑器是如何设置的:

  1. 提交时不使用--editor-cmd 选项
  2. SVN_EDITOR 未设置环境变量
  3. 我的~/.subversion/config/etc/subversion/config 中都没有设置editor-cmd。这两个文件都存在,但该行已被注释掉。
  4. VISUAL 未设置环境变量
  5. EDITOR 未设置环境变量
  6. 我正在下载the official repository,所以应该没有后备。

必须有另一个地方可以设置默认值。有人知道吗?

编辑:有人建议 Subversion 可能会调用 /usr/bin/editor,但这不是在我同事的机器上设置的。我发现/usr/bin/editor 在我的系统和我同事的系统上设置相同。

【问题讨论】:

  • 在您的svn 命令上使用ltrace 来找出答案。也许svn 二进制文件有一些内置的东西;试试strings $(which svn)
  • 您确认您使用的 subversion 版本是您构建的版本吗?是否有可能您同时安装并运行了错误的?我会通过运行svn --version 来验证
  • 在两台机器上调用svn --version 表明它们都在运行Subversion 版本1.8.10
  • 你能告诉我你用什么命令行来配置你的颠覆构建(你必须得到源代码并完成了./configure;make;sudo make install或类似的东西)。我很好奇的是您是否为./configure 指定了任何选项。如果你没有使用./configure,你是如何从源代码构建的?

标签: linux svn text-editor command-line-interface


【解决方案1】:

当您直接下载源代码(并构建它 - 假设您满足构建依赖项)时,您指定(或者您可以省略它)默认的后备编辑器。通常源代码构建是在 Ubuntu 上使用类似这样的东西完成的(假设我已经从 here 提取/下载了 subversion 1.8.10 源代码):

./configure
make
sudo make install

注意上面的./configure 命令没有指定任何选项。默认值将安装到前缀 /usr/local 。在发出这些命令之前(在 Ubuntu 12.04 上)我运行了 sudo apt-get build-dep subversion 。然后我执行了上面的命令来构建和安装。我确保不满足选项 1-5(在 OPs 问题中),然后尝试将更改提交到存储库。我得到了这样的回应:

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 使用的差异文件,向下滚动你会发现他们使用了这组 ./configure 选项(标志):

配置标志:= \ --前缀=/usr\ --libdir=$(libdir)\ --mandir=\$${前缀}/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 实际得到满足。
  • 使用--with-editor 配置标志(直接或间接)构建了一个颠覆版本。回退将指向 --with-editor 配置标志设置的任何内容。
  • 在其中一个系统上运行了错误版本的颠覆。一种可能性是实际上正在使用 Ubuntu 上的官方颠覆。如果是这种情况,它被构建为使用 /usr/bin/editor 作为后备。
  • 在您的一个系统上,您有一个svn 的别名(或等效名称),它指定了一个编辑器。别名将在启动脚本中指定,例如 ~/.bashrc~/.bash_profile/etc/bash.bashrc

【讨论】:

    【解决方案2】:

    我认为在 Linux 和其他类 Unix 系统上指定它的正常方法是设置 VISUAL 环境变量(用于 GUI 编辑器)或 EDITOR 变量(用于在终端中运行的编辑器)。

    【讨论】:

    • 正如我的问题所述,我的系统上没有设置任何环境变量,但它可以工作(即在提交时启动 vim)
    【解决方案3】:

    试试这个:

    update-alternatives --display editor
    

    【讨论】:

    • 看起来你在谈论“替代”系统,直到现在我才真正听说过。 linux.die.net/man/8/alternatives 提供了一些关于系统及其功能的信息,我不确定是否有更好的资源。
    • 我的系统上没有更新替代方案。请使用您认为这与我的问题有关的信息更新您的答案。这个系统如何与 Subversion 相关联,假设它确实如此?
    • 据我所知,替代系统是 Debian 衍生产品的标准配置。您提到您使用的是 Ubuntu 机器。 Debian 衍生产品使用 dpkg 来安装、卸载和清除应用程序,对吗? (突触等是前端)。 /usr/bin/update-alternativesdpkg 包安装。使用我给你的命令,你会发现 /usr/bin/editor 链接到哪个编辑器。是 vim 吗?
    • 我刚刚检查过,这在我的计算机和我同事的计算机上设置相同。 /usr/bin/editor 链接到 /etc/alternatives/editor 链接到 /usr/bin/vim.gnome。所以看起来Subversion默认不调用/usr/bin/editor
    • 你们是否都使用相同版本的 subversion 并且编译方式相同? svn——版本; md5sum $(哪个svn)
    【解决方案4】:

    在您的 svn 二进制文件上运行 strings 以查看其中是否提到了 Vim 或任何相关的环境变量。

    strace -f 下提交也可能会透露一些信息。

    【讨论】:

      【解决方案5】:

      在您的 .bashrc 文件中设置它。
      不要忘记“source .bashrc”或重新打开终端。

      导出 SVN_EDITOR='vim'

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-12
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        • 2021-03-05
        • 2011-03-10
        • 1970-01-01
        • 2021-04-09
        相关资源
        最近更新 更多