【问题标题】:What's the magic in "Github for Windows" that make it work in emacs?“Github for Windows”有什么魔力让它在 emacs 中工作?
【发布时间】:2012-07-29 18:50:47
【问题描述】:

我整天都在努力让 git 在 Windows 7 x86 上的 emacs shell(版本 24)中工作。 (*) 罪魁祸首其实是 ssh,它是行不通的。例如,输入:

ssh -T git@github.com

将永远挂起,无论 emacs 中使用的 shell 类型(emacs shell(又名 eshell)或 msys bash)。在 emacs 之外,它工作得很好(在 bash 或 cmd.exe 中)。

注意-T 参数,它说“不要分配伪tty”(emacs 不能分配伪tty,至少在Windows 上不能)。所以这不是问题。

我尝试过使用 MSYS(不是 msys-git)或“Git for Windows”中的 ssh.exe。谨防! “Windows 版 Git”与“Windows 版 Github”不同。 "Git for Windows" 是二进制文件和支持实用程序的安装程序,通过在 msys-git 下构建 git(专门为此目的而存在的开发环境)获得。出于这个原因,它“Git for Windows”经常被错误地称为 msys-git。

输入“Github for Windows”。使用他们的 git/ssh 版本,我可以在 emacs shell 下使用 git 和 ssh。据我所知,该程序只是简单地使用了“Git for Windows”。但是,它是一个修改版本。例如,添加了一个etc/ssh/ssh_config 文件。

我已经确定etc/ssh/ssh_config 中的一些配置是 ssh 在 emacs 中工作的原始配置。然而,仅凭这一点并不能解释它为什么起作用,因为将这个配置文件与“Git for Windows”一起使用并不能解决问题。

所以我想知道 Github 团队对“Git for Windows”做了哪些其他更改,以使其在 emacs 中工作。

我什至不确定“在 emacs 中工作”是否是预期目标。这就是为什么这个问题的答案很重要:如果“Github for Windows”的未来版本破坏了 emacs 兼容性,我将无法再在 emacs shell 中使用 git。

(*) 是的,我对 vc-git、magit、tramp 等一无所知。我不感兴趣。

【问题讨论】:

    标签: git emacs ssh github msysgit


    【解决方案1】:

    基本上 ssh 在提示输入密码时会挂起。由于 Windows 的一些内部细节,来自管道(Emacs)的输入与在控制台窗口(bash 或 cmd.exe)中输入时的处理方式不同。如果 ssh.exe 和 git.exe 没有在正确的时间刷新它们的缓冲区,那么当从 Emacs 输入时,输入可能会在它们之间陷入困境。这只发生在 Emacs 运行一个子进程时,该子进程运行另一个自己的子进程,该子进程请求输入。

    在不深入研究 git 和 ssh 的源代码的情况下,我所知道的唯一解决方法是使用带有 ssh-agent 的公钥身份验证,并在尝试使用 Emacs 中的 git 之前预先授权您的密钥。这将消除 ssh 提示输入密码的需要。我不知道这是否是 github 的一个选项。

    【讨论】:

    • 我确实有 ssh-agent 在后台运行。所以 github for windows 必须在启动时处理好这个问题。
    【解决方案2】:

    @JSON 的最后一点是你感兴趣的——“公钥加密”。

    这是马口中的一些信息——github docs

    这里有一些关于 ssh-agent 如何工作的more info,包括如何从 你的 .shrc 文件。

    基本上,一旦你在 github 上设置了你的公钥,你就应该有 每次启动时使用 ssh-add 输入一次密码,一切都会神奇地工作。

    【讨论】:

      猜你喜欢
      • 2019-11-08
      • 1970-01-01
      • 2013-08-08
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 2023-03-29
      • 2016-09-23
      相关资源
      最近更新 更多