Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';“什么是魔法?”;适用于Windows的Github“;让它在emacs中工作?_Git_Emacs_Ssh_Github_Msysgit - Fatal编程技术网

什么';“什么是魔法?”;适用于Windows的Github“;让它在emacs中工作?

什么';“什么是魔法?”;适用于Windows的Github“;让它在emacs中工作?,git,emacs,ssh,github,msysgit,Git,Emacs,Ssh,Github,Msysgit,我整天都在努力让git在Windows7x86上的EmacsShell(版本24)中工作。(*)罪魁祸首实际上是ssh,这不起作用。例如,键入: ssh -T git@github.com 将永远挂起,无论emacs内部使用何种类型的shell(emacs shell(又名eshell)或msys bash)。在emacs之外,它可以正常工作(在bash或cmd.exe中) 请注意-T参数,该参数表示“不要分配伪tty”(emacs不能分配伪tty,至少在Windows上不能)。所以这不是问题

我整天都在努力让git在Windows7x86上的EmacsShell(版本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而获得的。出于这个原因,it“Git For Windows”经常被错误地称为msys Git

输入“Github for Windows”。使用他们版本的git/ssh,我能够在emacs shell下使用git和ssh。据我所知,该程序只是在包装下使用了“Git for Windows”。然而,这是一个修改版本。例如,添加了一个
etc/ssh/ssh\u config
文件

我已经确定,
etc/ssh/ssh\u config
中的一些配置是ssh在emacs中工作的原始配置。然而,这并不能解释为什么它可以工作,因为将这个配置文件与“Git for Windows”一起使用并不能起到作用

因此,我想知道的是Github团队对“Git for Windows”做了哪些其他更改,以便它在emacs中工作

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


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

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


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

@JSON的最后一点是您感兴趣的--“公钥加密”

这是一些来自马嘴的信息--

下面是一些关于ssh代理如何工作的介绍,包括如何从 您的.shrc文件

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

我确实在后台运行了ssh代理。因此,github for windows必须在启动时处理这些问题。