`git difftool`拒绝在Emacs低级shell下运行

当我在纯cygwin shell下输入git difftool ,我只是得到良性退出:

~/sb/ws> git difftool
~/sb/ws>

但是当我在Emacs劣质shell(运行相同的cygwin bash)下键入完全相同的东西时,我收到以下错误:

~/sb/ws> git difftool
git difftool
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LC_ALL = (unset),
    LANG = "ENU"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
~/sb/ws> 

任何想法为什么发生这种情况,以及如何解决这个问题

(顺便说一下,所有其他的git命令在这个Emacs劣质shell下都能很好地工作,所以我只能假设它必须是difftool特有的东西)

编辑 (提供有关工具的变体和版本信息):

  • 的cygwin-1.7.8-1
  • G41R2F1上的2010-05-08的GNU Emacs 23.2.1(i386-mingw-nt6.1.7600)
  • git版本1.7.4
  • Windows 7旗舰版64位

  • 你真的有错LANG,请查看/ usr / share / locale以获取可用语言环境的列表。

    但真正的问题是 - 为什么在Emacs中直接使用git,当它有几个好的git模式时,还有magit--它们之间最好? 为什么不使用Emacs执行所有任务?

    PS我有一篇关于Emacs + Git的文章...


    6年后更新(2017年)

    顺便说一下,所有其他的git命令都可以在这个Emacs劣质外壳下完美工作,所以我只能假设它必须是特定于difftool东西

    具体到difftool是,它仍然(但不是很长)写在Perl: git-difftool.perl

    但随着Git 2.12(2017年第1季度),这将很快发生变化。
    这意味着difftool应该能够在Emacs下运行,不会difftool Perl的困扰。

    请参阅由Johannes Schindelin( dscho )提交03831ef并提交019678d(2017年1月19日)。

    difftool :在内置中实现功能

    转换difftool的动机是Perl脚本在Windows上完全不是原生的,因此在该平台上git difftool相当缓慢,因为它没有很好的缓慢原因。

    另外,Perl并没有真正访问Git的内部。
    这意味着任何脚本总是需要跳过不必要的循环,而且通常需要执行不必要的工作(例如,每次调用git config查询单个配置值时读取整个配置时)。

    然而,内建difftool的当前版本并没有充分利用内部结构,而是选择产生几个Git进程,以便实现更轻松的转换。 还有很大的改进空间,稍后会留下。

    注意:为了安全起见,除非配置设置difftool.useBuiltin设置为true否则最初的difftool仍然会被调用。

    原因是:这个新的实验性内建difftool作为Git for Windows v2.11.0的一部分发布,以允许更容易的大规模测试,当然作为选择性功能。

    Linux上的加速比在Windows上更加明显:快速测试显示t7800-difftool.sh运行/

  • 在Linux虚拟机中(2.183s / 0.052s / 0.108s)(real / user / sys),从(6.529s / 3.112s / 0.644s)
  • 在Windows上,它是(36.064s / 2.730s / 7.194s),低于(47.637s / 2.407s / 6.863s)。
  • 罪魁祸首最有可能是由于仍然不得不difftool--helper.sh mergetool-lib.shdifftool--helper.sh而产生的开销。

    不过,这是一个改进。

    链接地址: http://www.djcxy.com/p/94075.html

    上一篇: `git difftool` refuses to run under Emacs inferior shell

    下一篇: Emacs in Windows