`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
特有的东西)
编辑 (提供有关工具的变体和版本信息):
你真的有错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
运行/
罪魁祸首最有可能是由于仍然不得不difftool--helper.sh
mergetool-lib.sh
和difftool--helper.sh
而产生的开销。
不过,这是一个改进。
链接地址: http://www.djcxy.com/p/94075.html上一篇: `git difftool` refuses to run under Emacs inferior shell
下一篇: Emacs in Windows