2

我整天都在努力让 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 等一无所知。我不感兴趣。

4

2 回答 2

7

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

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

于 2012-08-01T00:52:22.067 回答
2

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

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

以下是有关 ssh-agent 如何工作的更多信息,包括如何从 .shrc 文件中使用它。

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

于 2012-08-01T12:21:26.413 回答