gitのHTTP認証に絶望した!

gitはどうしても独自プロトコル+sshを使って欲しいのだろうか。HTTP認証がいい加減すぎる。libcurlでデフォルトでできることしかできない。

認証方式の指定ができない

まず、認証方式を指定することが一切できない。BASIC認証なら一応使えるが、それもlibcurlが無指定でやってくれてる分だけ。

ユーザ名、パスワードがconfigに保存できない

ユーザ名やパスワードはconfigファイルに保存できて然るべき情報。これができないのでは対応する気がないと言わざるを得ない。
一応指定する方法はあるが、スマートではない。

netrcファイルを使う

$HOME/.netrcに以下のように書いておく。

machine www.example.com
login username
password password

もちろんこれだとBASIC認証しか対応できないし、1つのホストに対して1つのユーザでしか認証できない。パスワードも平文で書いておかなくてはならない。怖すぎる。

URLに含める

curlは、

http://<username>:<password>@hostname/path/to/rep

の形式が使用できる。元々ftpプロトコルでの指定方法だが、curlではhttpでも認識してくれる。
ただし、こんな恐ろしい方法はできることなら使いたくないところ。

$ git clone http://<username>:<password>@hostname/path/to/rep

などとしようものなら、コマンドヒストリーや.git/configにパスワードが残り、pushなどをするたびにURLが表示されてしまう。

どちらの方法もパスワードの平文がファイルに残ったり画面に映ったりするのでできれば使いたくないが、他に方法がない*1。しかもBASIC認証なので、httpsの使用は必須だろう。
sshの方もssh-agentや鍵なし秘密鍵を使ったりして誤魔化してる感じだった気がするので*2、gitさんには早いところパスワードを暗号化してconfigに含めるくらいのことはやっていただきたい。

*1:少なくとも私は知らない

*2:実はよくわかってないけど