2012-07-31 50 views
1

我一直试图让Windows 7 x86上的emacs shell(版本24)内的git工作。 (*)罪魁祸首实际上是ssh,这是行不通的。例如,输入:“Github for Windows”中有什么魔法让它在emacs中工作?

ssh -T [email protected] 

将永远挂,无论在Emacs的shell类型(Emacs的外壳(又名ESHELL)或MSYS的bash)。在emacs之外,它工作得很好(在bash或cmd.exe中)。

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

我使用ssh.exe无论从MSYS(不MSYS-GIT)或 “混帐的Windows” 尝试。谨防! “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的团队,以“混帐的Windows”进行其它更改为它在Emacs工作。

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

(*)是的,我知道所有关于VC-混帐,magit,流浪汉,等我不感兴趣。

回答

6

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

我知道的唯一解决方法是不使用git和ssh的源代码,而是使用ssh-agent的公钥验证,并在尝试从Emacs使用git之前预先授权您的密钥。这将消除需要ssh来提示输入密码。我不知道这是否是github的选项。

+0

我确实在后台运行ssh-agent。所以github的windows必须在启动时考虑到这一点。 – Norswap 2012-08-04 09:12:53

1

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

下面是从马的嘴一些信息 - github docs

以下是关于ssh-agent如何工作的一些more info,包括如何使用您的.shrc文件中的 。

基本上,一旦你在github上有你的公钥设置,你应该有 用ssh-add启动一次就可以输入你的密码,并且所有东西都可以神奇地工作。

相关问题