magit-push висить на Windows


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*буфері, більш-менш. Нічого більш корисного. Я в змозі натиснути git push з командного рядка, але він запитує пароль мого ключа ssh. Можливо, це проблема? Я спробував завантажити ключ Pageant (ключовий агент PuTTY), але це, схоже, не мало значення.

Якщо це корисно, у мене встановлено Cygwin, і я би радий із рішенням, яке передбачає примушення Emacs використовувати виконувані файли Cygwin.

Відповіді:


6

Зараз у вікі Magit розміщена сторінка про різні способи, які можна натиснути з Magit при використанні MS Windows. Оформити також новий ssh-agencyпакет. І сторінку wiki, і пакет написали @npostavs.

Також зауважте, що практично ніколи не винен Magit, якщо ви не можете натиснути. Зазвичай це проблема конфігурації (навіть якщо ви можете натиснути з оболонки, але не під час використання Magit).


6

Зазвичай проблема полягає в тому, що Emacs не може отримати доступ до підказки про git для git у Windows. Таким чином, воно, здається, "зависає" на push, де воно справді чекає вашого пароля. Ви можете обійти це, використовуючи ключ ssh замість імені користувача / пароля у вашому git repo, і роблячи перший натискання вручну в оболонці (git запам'ятає ваш ssh пароль після першого натискання).


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

3

Якщо ви цього ще не зробили, я б рекомендував використовувати SSH замість HTTP, як багато хто рекомендував мені під час мого розслідування цього. Однак, я зміг вирішити цю проблему за допомогою наведених нижче питань:

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

Відсутній компонент (від сценарію Gitub Git Bash .bashrc) полягає в тому, що він не обробляє запуск ssh-агента для інтерфейсів, таких як командний рядок Windows або emacs. Виконуючи вищезазначені дії, ініціює ssh-агент при запуску 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, на зразок виступів.
Том Перл

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-рядка є попереднім". Я віддаю перевагу такому підходу.

Крім того, ви можете просто запустити git-poveritel-winstore.exe, і він встановить себе у папку AppData і заповнить ваш .gitconfigфайл за допомогою жорсткого коду до його місцезнаходження. Після запуску його .gitconfigбуде виглядати так:

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

Знак оклику вказує Гіту трактувати рядок як абсолютний шлях.


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якимось чином пов’язаний з магітом.
Жиль "ТАК - перестань бути злим"

приємно. я отримую відмітку для видалення, перш ніж я навіть отримаю можливість краще пояснити? це відповідь (рішення) проблеми.
Мадід альДосарі

1
Я не вважаю, що відповідь заслуговує на те, щоб її оскаржували. Але може бути краще пояснити причину, чому вона працювала (якщо запуск із оболонки Git на Windows, деякі змінні середовища будуть ініціалізовані по-різному в Emacs, це також призведе до того, що Magit зможе взаємодіяти з Git так, як це розуміє). Можливо, так, як ОП намагався запускати команди Magit, взаємодіючи з Git, таким чином, як Magit не очікував.
wvxvw

1
Це відповідь. Користувач може не знати, чому це змінило значення, але вони говорять про те, що спрацювало у їхньому випадку.
Малабарба
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.