当我在普通的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
特有的东西)
编辑(提供相关工具的变体和版本信息):
答案 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 03831ef见commit 019678d和Johannes 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.sh
和difftool--helper.sh
。不过,这是一项改进。