Windowsでmagit-pushがハングする


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の実行可能ファイルを使用するように強制することを含むソリューションに満足しています。

回答:


6

Magitのwikiには、MS Windowsを使用するときにMagitからプッシュできるさまざまな方法に関するページが追加されました。また、新しいssh-agencyパッケージをチェックアウトします。Wikiページとパッケージの両方が@npostavsによって作成されました。

また、プッシュできない場合でも、Magitの責任は事実上ありません。これは通常、構成の問題です(シェルからプッシュできても、Magitを使用している場合はできません)。


6

通常、問題はEmacsがWindows上のgitのパスワードプロンプトにアクセスできないことです。したがって、それは実際にパスワードを待っているプッシュで「ハング」しているように見えます。これを回避するには、gitリポジトリでユーザー名/パスワードの代わりにsshキーを使用し、シェルで最初のプッシュを手動で実行します(gitは最初のプッシュ後のsshパスワードを記憶します)。


1
Git bashシェルは私のsshパスワードを記憶していないようなので、より多くのプッシュが同じものを見ているだけです。
ライアン

3

まだ行っていない場合は、HTTPの代わりにSSHを使用することをお勧めします。これについては、調査中に多くの人に勧められています。とはいえ、以下のFAQを使用してこの問題を解決することができました。

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と、pageantなどのPuTTY関連の実行可能ファイルをインストールした人にとって、最良のソリューションでした。
Tom Purl、2018年

1

Cygwinがすでにインストールされている場合は、キーチェーンキーチェーン環境を使用してキーを管理できます。

選択したシェルを使用してキーチェーンを起動し、

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

キーがEmacsに確実に読み込まれるようにします。


うーん。私はこれを試しましたが、実際には何も変わりませんでした。magit-pushコマンドは、それは常に場合と同じように電話を切りました。
ライアン

1

MSYS GitとEmacsだけでこれを修正する方法を理解できませんでしたが、シームレスな回避策があります。

$ PATH にGit Credential Winstoreを追加します。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

gitシェルからrunemacs.exeを実行しました。これでmagitからのgit pushが機能します。


1
これは、質問とはまったく関係がないようです。質問に回答するつもりなら、実行runemacsがmagitにどのように関連しているかを説明する回答を編集してください。
Gilles「SO-邪悪なことをやめよ」

いいね。説明する機会が得られる前に削除マークが付けられますか?それは問題に対する答え(解決策)です。
Majid alDosari 2015年

1
私は答えが反対票を投じられるに値するとは思わない。しかし、それが機能した理由を説明する方が良いかもしれません(WindowsでGitシェルから実行する場合、一部の環境変数はEmacsで異なるように初期化されます。これにより、Magitが理解する方法でGitと対話できるようになります)。おそらく、OPがMagitコマンドを実行しようとした方法が、Magitが予期していなかった方法でGitと相互作用しました。
wvxvw 2015年

1
これが答えです。ユーザーはそれが違いを生ん理由を知らないかもしれませんが、彼らは彼らのケースで何がうまくいったかを言っています。
マラバルバ2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.