`git difftool`拒绝在Emacs劣质shell下运行

时间:2011-07-11 02:31:23

标签: windows git emacs cygwin difftool

当我在普通的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特有的东西)

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

  1. 的cygwin-1.7.8-1
  2. 2010-04-08关于G41R2F1的GNU Emacs 23.2.1(i386-mingw-nt6.1.7600)
  3. git version 1.7.4
  4. Windows 7旗舰版64位

2 个答案:

答案 0 :(得分:1)

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

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

P.S。我有一篇关于Emacs + Git ...

的文章

答案 1 :(得分:0)

6年后(2017年)更新

  顺便说一句,所有其他git命令在这个Emacs劣质shell下完美运行,所以我只能认为这必须是difftool

特有的

difftool的具体内容是它仍然(但不是很久)用perl编写:git-difftool.perl

但是,随着Git 2.12(2017年第一季度),这种情况很快就会改变 这意味着difftool应该在Emacs下运行就好了,不再被Perl打扰了。

commit 03831efcommit 019678dJohannes Schindelin (dscho)(2017年1月19日)。

  

difftool:实现内置

中的功能      

转换difftool的动机是Perl脚本在Windows上完全不是本机的,因此git difftool非常慢   那个平台,没有充分的理由让它变慢。

     

此外,Perl实际上无法访问Git的内部   这意味着任何脚本总是必须跳过不必要的   箍,它往往需要执行不必要的工作(例如,何时   每次调用git config来查询a时读取整个配置   单个配置值)。

     

然而,当前版本的内置difftool并没有完整   使用内部,但选择产生几个Git   仍然是为了使转换更容易。还有很多   改善的余地,稍后离开。

     

注意:为了安全起见,原来的difftool仍会被调用,除非   配置设置difftool.useBuiltin设置为true

     

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

     

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

     
      Linux中的
  • in(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)。
  •   
     

罪魁祸首很可能是仍然所产生的开销   炮轰到mergetool-lib.shdifftool--helper.sh

     

不过,这是一项改进。