"Github for Windows"的神奇之处在于它可以在emacs中运行吗?

Nor*_*wap 1 git emacs ssh github msysgit

我一直在尝试在Windows 7 x86上的emacs shell(版本24)中进行git工作.(*)罪魁祸首实际上是ssh,这是行不通的.例如,输入:

ssh -T git@github.com
Run Code Online (Sandbox Code Playgroud)

无论在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团队为了使其在emacs中工作而对"Git for Windows"所做的其他更改.

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

(*)是的,我知道所有关于vc-git,magit,tramp等等.我不感兴趣.

JSO*_*SON 6

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

我所知道的唯一没有深入研究git和ssh源代码的解决方法是使用ssh-agent进行公钥认证,并在尝试使用Emacs中的git之前预先授权你的密钥.这将消除ssh提示输入密码的需要.我不知道这是否是github的选项.