Githubの自分のリポジトリをfetchやpullする際にsshパスフレーズの入力を不要にする。もしくはリモートリポジトリをfetchとpushで別々に設定する。
$ git clone git@github.com:kanonji/test.git #sshで通信するのでパスフレーズが必要。 $ cd test $ git remote -v origin git@github.com:kanonji/test.git (fetch) origin git@github.com:kanonji/test.git (push) $ git fetch #sshで通信するのでパスフレーズが必要。
Githubで公開されてるリポジトリは原則誰でも読み込みが出来るもので、なにかとあるオープンソースソフトウェアをgit clone
でダウンロードして使うというのは、よくある使い方。この時、clone
しようがfetch
しようがpull
しようが、パスフレーズなんかの入力なんて無しにデータは取得できる。なのに、自分のリポジトリの場合はclone
にもfetch
にもpull
にも、パスフレーズを毎回要求されて、これが割りとめんどくさい。
解決方法
$ git clone https://github.com/kanonji/test.git $ cd test $ git remote -v origin https://github.com/kanonji/test.git (fetch) origin https://github.com/kanonji/test.git (push) $ git fetch
他者のリポジトリをcloneする場合と同じ、HTTPのURLを使えばclone
もfetch
もpull
も、無認証で取得可能になる。
$ git remote set-url --push origin git@github.com:kanonji/test.git $ git remote -v origin https://github.com/kanonji/test.git (fetch) origin git@github.com:kanonji/test.git (push)
HTTPのURLは、そのままでもRead+Write accessだけど、認証*1にGithubのwebにログインするユーザー名とパスワードを入力しないとならない。これはこれで面倒なので、originというリモートリポジトリのpushのほうだけ、SSHのURLに変更する。これで、fetch
やpull
などデータを取ってくるのは無認証で、push
は今までどおりsshのパスフレーズで認証という使い方ができる。
HTTPのURLの代わりにGit Read-OnlyのURLでも良い
$ git clone git://github.com/kanonji/test.git
こっちでもいいんだけど、他者のリポジトリを取得する場合でも、デフォルトはHTTPの方なので、あえてこっちにしなくてもいい気がする。
$ git remote -v origin git://github.com/kanonji/test.git (fetch) origin git@github.com:kanonji/test.git (push)
この設定が済んでいるか確認するにも、ぱっと見でちょっとだけわかりにくいし。