magit-push在Windows上挂起


10

我在Windows上使用GNU Emacs,无法magit-push将本地更改推送到远程存储库。不论是使用SSH还是HTTPS访问远程存储库,都会发生这种情况。我需要做些什么才能使magit-pushWindows在Linux机器上无缝(或至少接近)地工作?

我在*Messages*缓冲区中看到的是

Running c:/Program Files (x86)/Git/bin/git.exe push -v origin master:refs/heads/master

*magit-process*缓冲区中或多或少都显示相同的内容。没有什么比这有用的了。我可以从命令行进行git push,但是它确实要求输入我的ssh密钥的密码。可能是问题所在吗?我曾尝试用Pageant(PuTTY的密钥代理)加载密钥,但这似乎没有什么不同。

如果有帮助,我已经安装了Cygwin,并且对强制Emacs使用Cygwin的可执行文件的解决方案感到满意。

Answers:


6

Magit的Wiki现在提供有关使用MS Windows时可以从Magit推送的各种方式的页面。还要签出新ssh-agency包装。Wiki页面和软件包均由@npostavs编写。

另请注意,如果您不能推动,那几乎不是Magit的错。这通常是一个配置问题(即使您可以从外壳中推入但使用Magit时也不能)。


6

通常,问题是Emacs在Windows上无法访问git的密码提示。因此,它似乎“挂起”了推送,实际上它正在等待您的密码。您可以通过在git repo中使用ssh密钥而不是用户名/密码来规避此问题,并在shell中手动进行第一次推送(git会在第一次推送后记住您的ssh密码)。


1
Git bash shell似乎不记得我的ssh密码,因此更多的推送操作都可以看到相同的内容。
瑞安

3

如果您还没有这样做,我建议您使用SSH而不是HTTP,因为许多人在对此进行调查时都向我推荐了HTTP。也就是说,我可以使用以下常见问题解决此问题:

https://github.com/magit/magit/wiki/FAQ#windows-cannot-push-with-ssh-passphrase

缺少的组件(来自Github的Git Bash .bashrc脚本)是,它不处理Windows命令行或emacs等界面的ssh-agent启动。执行上述步骤后,将在emacs启动时启动ssh-agent。注意,在启动/重新启动计算机时,您将必须启动Git Bash并输入SSH密码。


2

我也经历了一段时间,直到今天还没有真正尝试解决它。为此,我将以下内容放入了init文件:

(setenv "GIT_SSH" "C:/Path/to/PuTTY/plink.exe")

我还通过打开一个干净的Emacs(emacs -Q),加载magit并评估该行对其进行了测试,并且它可以正常工作。

这可以使用Pageant,因此无需理会ssh-agent


1
对我来说,这对于安装了命令行git和与PuTTY相关的可执行文件(如pageant)的人来说是最好的解决方案。
汤姆·普尔

1

如果您已经安装了Cygwin,则可以使用钥匙串钥匙串环境来管理您的钥匙。

使用您选择的外壳启动钥匙串,然后

(require 'keychain-environment)
(keychain-refresh-environment)

确保将密钥加载到Emacs中。


嗯 我试过了,什么都没有改变。该magit-push命令像往常一样挂起。
瑞安

1

我从来没有想过仅使用MSYS Git和Emacs来解决此问题的方法,但是这里提供了无缝的解决方法。

Git Credential Winstore添加到您的$ PATH中。Git-Credential-Winstore将使用Windows钥匙串为您管理密码,Magit将愉快地推送到远程存储库。

在您的.gitconfig文件中,设置以下内容:

[credential]
        helper = "winstore"

之所以可行,是因为Git Credential Docs声明“如果帮助者名称不是绝对路径,则将字符串git credential-放在前面”。我更喜欢这种方法。

或者,您可以简单地运行git-credential-winstore.exe,它将自动将其安装到AppData文件夹中,并.gitconfig使用指向其位置的硬编码路径填充文件。运行后,您.gitconfig将如下所示:

[credential]
        helper = !"c:\\Users\Joe\\\AppData\\Roaming\\GitCredStore\\git-credential-winstore.exe"

感叹号指示Git将字符串视为绝对路径。


0

正如@bastibe指出的那样,Magit可能正在等待密码输入,然后就挂在那里。

当我被迫使用Windows时,我记得以下工作:-)。我不记得确切的命令名称,还请确保exec-path包含contains c:/Program Files (x86)/Git/bin/

(setenv "GIT_ASKPASS" "git-gui--askpass")

0

我从git shell运行runemacs.exe。现在,来自magit的git push起作用了。


1
这似乎与问题没有任何关系。如果您想回答这个问题,请编辑您的答案,以解释跑步runemacs与magit有何关系。
吉尔斯(Gilles)'所以

很好 我什至没有机会更好地解释之前被标记为删除?这是问题的答案(解决方案)。
Majid alDosari'3

1
我认为答案不应该被低估。但是最好解释一下它起作用的原因(如果在Windows上从Git shell运行,则某些环境变量将在Emacs中以不同的方式初始化,这也将导致Magit能够以其理解的方式与Git交互)。也许OP尝试运行Magit命令与Magit交互的方式是Magit所没有想到的。
wvxvw 2015年

1
这是一个答案。用户可能不知道为什么会有所不同,但是他们说的是适用于他们的情况。
马拉巴巴
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.