“Github for Windows”有什么魔力让它在emacs中工作?
问题:“Github for Windows”有什么魔力让它在emacs中工作?
我整天都在努力让 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。谨防! “Git for Windows”与“Github for Windows”不同。 "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 等一无所知。我不感兴趣。
解答
基本上 ssh 在提示输入密码时会挂起。由于 Windows 的一些内部细节,来自管道(Emacs)的输入与在控制台窗口(bash 或 cmd.exe)中输入时的处理方式不同。如果 ssh.exe 和 git.exe 没有在正确的时间刷新它们的缓冲区,那么当从 Emacs 输入时,输入可能会在它们之间陷入困境。这只发生在 Emacs 正在运行一个子进程时,该子进程运行它自己的另一个子进程,该子进程请求输入。
在不深入研究 git 和 ssh 的源代码的情况下,我所知道的唯一解决方法是使用带有 ssh-agent 的公钥身份验证,并在尝试使用 Emacs 中的 git 之前预先授权您的密钥。这将消除 ssh 提示输入密码的需要。我不知道这是否是 github 的一个选项。
更多推荐


所有评论(0)