4

当我git difftool在普通的 cygwin shell 下输入时,我只会收到良性退出:

~/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. G41R2F1 上 2010 年 5 月 8 日的 GNU Emacs 23.2.1 (i386-mingw-nt6.1.7600)
  3. git 版本 1.7.4
  4. Windows 7 旗舰版 64 位
4

2 回答 2

1

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

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

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

于 2011-07-11T06:30:24.887 回答
0

6年后更新(2017)

顺便说一下,所有其他 git 命令都可以在这个 Emacs 劣质 shell 下完美运行,所以我只能假设这一定是特定于difftool

具体difftool而言,它仍然(但不会持续很长时间)用 perl 编写:git-difftool.perl

但随着 Git 2.12(2017 年第一季度),这将很快改变。
这意味着difftool应该可以在 Emacs 下正常运行,不再为 Perl 所困扰。

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

difftool:实现内置功能

转换的动机difftool是 Perl 脚本在 Windows 上根本不是本机的,git difftool因此在该平台上相当慢,而没有充分的理由让它变慢。

此外,Perl 并不能真正访问 Git 的内部结构。
这意味着任何脚本都必须跳过不必要的环节,并且经常需要执行不必要的工作(例如,每次读取整个配置时git config都会调用查询单个配置值)。

但是,当前版本的内置 difftool 并没有充分利用内部结构,而是选择生成几个 Git 进程,以便更轻松地进行转换。还有很大的改进空间,留待以后。

注意:为了安全起见,除非配置设置设置为 ,difftool否则仍会调用原始文件。difftool.useBuiltintrue

原因:这个新的、实验性的、内置difftool的作为 Windows v2.11.0 的 Git 的一部分提供,以便更轻松地进行大规模测试,但当然是作为可选功能。

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

  • 在 Linux VM 中 (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

尽管如此,它仍然是一种改进。

于 2017-02-01T21:26:02.260 回答