大変ややこしい記事名してますがパッケージがそんなんだからしかたないのです
こんな人むけ
Sublime上のgitで無反応を起こしたりプロセスが残ったりする
SublimeGitやGitパッケージ経由してfetchとかpullとかしようとしたらずっと無反応だったり
ステータスバーのインジケータがずっと[]を往復したまま終わらなかったり
gitプロセスがずっと残りっぱなしになったり(つらい)
PermissionDenied(publicKey)
普通にコマンドプロンプトとかからfetchとかpullとかしようとした時に表題みたいなの出たとか
以下、これらの問題を回避する設定の方法です
かなり手探りで進めたので色々足りない手順が含まれている可能性あり
OpenSSHでGithubにつなぐ
まず大前提として、
Sublime上のGit達はpush時などのユーザーネームとパスワード入力に対応していないようです
認証が必要になるコマンドを使った時に進行せず延々とインジケータ動きっぱなしになったりするのはたぶんそのせい
なので、入力認証を避けるする方法で運用する必要があります。
とりあえずOpenSSHでやるかーと思ったので今回はOpenSSHです
PuTTYでもできるっぽいですが試してません
https://sublimegit.readthedocs.io/en/latest/troubleshooting.html
sshが諸事情で使えない場合は
http://tbpgr.hatenablog.com/entry/20131107/1383834179
こういうのを使うとよいらしい(こっちも未検証)
ssh-agentの立ち上げとssh-add
今回使用するssh-agentはMSYS環境に入ってるやつです(Git for Windowsインストールしてれば使えるはず?)
こちらのサイト様を参考に
- ssh-agentの立ち上げ
- ssh-addによる秘密鍵の追加
これらを行うバッチファイルを作っていきます
sublime上でうまいことgitを動かすためには
ssh-agentが立ち上がりつつ環境変数 SSH_AUTH_SOCK と SSH_AGENT_PID が設定されないといけないようです
参考ページにあるものそのままだとそのコマンドプロンプト内でしか設定されずsublime的にうまくいかないので、
setxに変えたりなんだりしてユーザ環境変数をいじるやつを作ります
@echo off
for /f "eol=; tokens=1,2 delims==;" %%1 in ('ssh-agent.exe') do (
if "%%1" == "SSH_AUTH_SOCK" (
setx SSH_AUTH_SOCK "%%2"
set SSH_AUTH_SOCK=%%2
)
if "%%1" == "SSH_AGENT_PID" (
setx SSH_AGENT_PID "%%2"
set SSH_AGENT_PID=%%2
)
)
ssh-add 入れたい秘密鍵のファイルパス
ぶっちゃけsetxだけあればいいような気も
これはgit操作を行う前に実行してください
一回実行したらssh-agentが死ぬまでは実行しなくて大丈夫なはず
とりあえずこれでssh-agentの起動は出来るわけですが、
このままだとssh-agentを殺すにはタスクマネージャから直接プロセスを落とさないといけなかったり、
上記バッチで一度ユーザ環境変数をいじっちゃってるのでその中身が残りっぱなしになってしまいます
そのため一応終了用のバッチファイルも用意しておきます
@echo off
ssh-agent -k
setx SSH_AUTH_SOCK ""
setx SSH_AGENT_PID ""
ここまで準備したら最初のバッチを実行してssh-agentの立ち上げ、秘密鍵の登録をします
あとはSublimeTextを立ち上げて
git fetchやgit pull、git pushをやってそれぞれ動けば成功です。
環境変数を空にするのにPC落とす前に終了バッチ叩かないといけないのがすごぶる面倒なんですが、
別に残ってても超困るという事は無い…はず…
結構困るケースがある場合もうちょっと別案考えた方がよさそう
参考にした文献
https://sublimegit.readthedocs.io/en/latest/troubleshooting.html
http://techblog.clara.jp/2014/07/ssh-agent/
http://mattn.kaoriya.net/software/20081106192615.htm
やってて思ったこと
SublimeText中の環境変数だけ変えつつSublimeTextが生きてる間だけssh-agent立ち上げておくとか出来ないのかしらと思ったんですが
これもしかしてプラグイン書けば出来たりする?