2014-10-02 70 views
2

尽管不缺乏关于如何设置Subversion命令行界面使用的文本编辑器的信息(例如,请参阅here,herehere),但我无法弄清楚我的本地系统正在从中获取文本编辑器信息。Linux上的Subversion CLI默认文本编辑器

在我的系统上,当我执行svn commit时,它会为提交消息打开vim。既然这是我想要的,我从来没有真正想过。这一直工作。然而,最近一名同事试图犯下错误,并且因为编辑没有设置的错误而失败。我从来没有用我的方式去设置一个编辑器,所以我对此非常困惑。

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

Subversion Book状态的Using External Editors部用于设置文本编辑器下列可能性:

  1. --editor-CMD命令行选项
  2. SVN_EDITOR环境变量
  3. 编辑-CMD运行时配置选项
  4. VISUAL环境变量
  5. EDITOR环境变量
  6. 可能,内置Subversion库回退值(官方不存在版本)

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

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

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

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

+2

使用'ltrace'您'svn'命令查找。也许'svn'二进制文件有内置的东西;尝试'字符串$(其中svn)' – 2014-10-22 17:40:11

+0

你确认你使用的版本是你创建的版本吗?是否有可能你已经安装并运行错误?我会通过运行'svn --version'来验证 – 2014-10-29 00:04:39

+0

在两台机器上调用'svn --version'表明它们都运行Subversion 1.8.10版本。 – 2014-10-29 00:23:02

回答

0

试试这个:

update-alternatives --display editor 
+0

它看起来像你在谈论的“替代品”系统,我实际上直到现在才听说。 http://linux.die.net/man/8/alternatives给出了关于系统及其功能的一些信息,我不确定是否有更好的资源。 – Ben 2014-10-03 03:40:42

+0

我的系统上没有更新选项。请更新您的答案,并提供您认为与我的问题有关的信息。这个系统如何与Subversion联系起来,假设它完成了? – 2014-10-03 14:14:27

+1

就我所知,替代系统是Debian衍生产品的标准配置。你提到你使用的是Ubuntu机器。 Debian衍生产品使用_dpkg_来安装,卸载和清除应用程序,对吗? (突触等是前端)。 '/ usr/bin/update-alternatives'由_dpkg_软件包安装。用我给你的命令,你会发现哪个编辑器有'/ usr/bin/editor'链接。它是_vim_? – jrfern 2014-10-10 17:03:20

0

我想在Linux和其他类Unix系统指定该正常方式,是设置VISUAL环境变量(GUI编辑器)或EDITOR变量(对于在终端中运行的编辑)。

+0

正如我的问题所述,我的系统中没有设置任何环境变量,但它仍然有效(即,调用vim提交) – 2014-10-02 22:50:49

+0

对不起,我想我回答了错误的问题:-) – Ben 2014-10-03 03:41:23

1

当您直接下载源代码(并构建它 - 假设您已满足构建依赖关系)时,您指定(或者可以忽略它)默认回退编辑器。通常源建立在Ubuntu这样的事情完成后(假设我已经提取/下载的颠覆从here1.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做一个官方的build时,他们的备用编辑器从哪里来?我在link去了12.04源代码库进行颠覆。在右侧,我下载了diff文件subversion_1.6.17dfsg-3ubuntu3.4.diff.gz。我打开了差异文件Ubuntu的使用和向下滚动,你可以找到他们使用这套./configure选项(标志):

confflags:= \ 前缀=的/ usr \ --libdir = $( libdir)\ --mandir = \ $$ {prefix}/share/man \ --with-apr =/usr \ --with-apr-util =/usr \ --with-neon =/usr \ --with-农奴=/USR \ --with-伯克利分贝= :::分贝\ --with-SASL =/USR \ --with编辑器=在/ usr /斌/编辑 \ --with-ru通过-sitedir =/usr/lib中/红宝石\ --with-痛饮=/USR \ --with-的KWallet \ --with-侏儒-钥匙圈

黑体条目显示,他们使用/usr/bin/editor作为他们的后备。

我已经在Ubuntu 12.04上从源代码构建了Subversion 1.8.10并获得了预期的行为。这暗示了以下其中一种可能性:

  • 在其中一个系统上实际满足选项1到5。
  • 颠覆的一个版本是用--with-editor配置标志(直接或间接)构建的。后备将指向--with-editor配置标志设置为。
  • 在其中一个系统上运行错误版本的Subversion。其中一种可能性是实际上正在使用Ubuntu官方颠覆。如果是这样的话,它的建立是为了使用/usr/bin/editor作为后备。
  • 在您的系统中,您有一个用于指定编辑器的svn的别名(或等效项)。例如,将在启动脚本中指定别名,例如~/.bashrc,~/.bash_profile,/etc/bash.bashrc
0

在您的svn二进制文件上运行strings以查看它是否提及Vim或任何相关的env变量。

根据strace -f还承诺可能会揭示一些东西。

0

将其设置在.bashrc文件中。
不要忘记“源.bashrc”或重新打开终端。

出口SVN_EDITOR = 'VIM'