magit-push висит на винде


10

Я использую GNU Emacs в Windows, и я не могу использовать его magit-pushдля отправки своих локальных изменений в удаленный репозиторий. Это происходит с удаленными репозиториями независимо от того, доступны ли они по SSH или HTTPS. Что мне нужно сделать, чтобы сделать magit-pushработу в Windows такой же гладкой (или, по крайней мере, почти такой же), как и на моих машинах с Linux?

Все, что я вижу в *Messages*буфере, это

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

То же самое показывает в *magit-process*буфере, более или менее. Ничего более полезного. Я могу нажать push из командной строки, но он запрашивает пароль моего ключа ssh. Может ли это быть проблемой? Я пытался загрузить ключ с помощью Pageant (ключевого агента PuTTY), но это, похоже, не имело значения.

Если это полезно, у меня установлен Cygwin, и я был бы рад решению, которое заставляло Emacs использовать исполняемые файлы Cygwin.

Ответы:


6

Вики Magit теперь содержат страницу о различных способах, которые можно использовать в MSit при использовании MS Windows. Также проверьте новый ssh-agencyпакет. Как вики-страница, так и пакет были написаны @npostavs.

Также обратите внимание, что это практически никогда не вина Magit, если вы не можете толкать. Обычно это проблема конфигурации (даже если вы можете нажать из оболочки, но не при использовании Magit).


6

Обычно проблема заключается в том, что Emacs не может получить доступ к паролю Git в Windows. Таким образом, он, кажется, «зависает» на толчке, где действительно ждет ваш пароль. Вы можете обойти это, используя ssh-ключ вместо имени пользователя / пароля в вашем git-репо и выполнив первое нажатие вручную в оболочке (git запомнит ваш ssh-пароль после первого нажатия).


1
Оболочка Git bash, похоже, не запоминает мой пароль ssh, поэтому больше толчков просто видят одно и то же.
Райан

3

Если вы еще этого не сделали, я бы порекомендовал использовать SSH вместо HTTP, как многие рекомендовали мне во время моего исследования этого. Тем не менее, я смог решить эту проблему, используя приведенный ниже FAQ:

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

Отсутствующий компонент (из сценария Git Bash .bashrc Github) заключается в том, что он не обрабатывает запуск ssh-agent для таких интерфейсов, как командная строка Windows или emacs. Выполнение вышеуказанных шагов запускает ssh-agent при запуске emacs. Обратите внимание, что вам нужно будет запустить 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, вы можете использовать keychain и keychain-environment для управления вашими ключами.

Используйте оболочку по вашему выбору для запуска связки ключей, затем

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

чтобы ключи были загружены в Emacs.


Хммм. Я попробовал это, и ничего действительно не изменилось. Команда magit-pushзависла так же, как и всегда.
Райан

1

Я никогда не думал, как это исправить, используя только MSYS Git и Emacs, но здесь есть обходной путь.

Добавьте Gin 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содержит c:/Program Files (x86)/Git/bin/.

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

0

Я запустил runemacs.exe из оболочки git. Теперь Git Push от Magit работает.


1
Похоже, это никак не связано с вопросом. Если вы хотели ответить на вопрос, отредактируйте свой ответ, который объясняет, как бег runemacsтак или иначе связан с magit.
Жиль "ТАК - перестань быть злым"

отлично. я отмечен для удаления, прежде чем я даже получу шанс лучше объяснить? это ответ (решение) проблемы.
Маджид альДосари

1
Я не думаю, что ответ заслуживает отрицательного ответа. Но может быть лучше объяснить причину, по которой это сработало (при запуске из оболочки Git в Windows некоторые переменные окружения будут инициализироваться в Emacs по-разному, это также приведет к тому, что Magit сможет взаимодействовать с Git так, как он это понимает). Возможно, способ, которым OP пытался запускать команды Magit, взаимодействовал с Git так, как Магит не ожидал.
wvxvw

1
Это ответ. Пользователь может не знать, почему это имело значение, но они говорят, что сработало в их случае.
Малабарба
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.