Mac の git ならどうってことないのに、 Ubuntu の git は Redmine (というかALMinium) 上に作った git リポジトリに対して git clone https://… とかやってアクセスしようとすると、
error: gnutls_handshake() failed: A TLS warning alert has been received.
とか怒ってくるです。
git version 1.7.9.5 さんはまだ怒ってくれるけど、 git version 1.9.1 さんは無言で 128 返してくるからノーヒントすぎてツライ。
オレオレ証明書使ってるのがまずいのかと思い、証明書をひっぺがして /usr/share/ca-certificates/smokycat/ 以下とかに置いて sudo dpkg-reconfigure ca-certificates とかしてシステムに信用させてもダメ。
stackoverflow error: gnutls_handshake() failed GIT repository には、類似の問題が載ってて、
error: gnutls_handshake() failed: A TLS packet with unexpected length was received. while accessing https://github.com/blah/blah.git/info/refs
っていう問題に対して、「gnutls無しでgitをビルドして使うんだ!」という解決方法が書いてある。
(め、めんどくせー・・・・・)
git clone http://…. ならよくて、 git clone https://…. ならダメなのです。
libcurl-gnutls に依存している git-remote-https を使ってるのがダメなようです(libgnutls はOK)。
色々探した結果、やっぱり自分でgitをコンパイルするしかないなーって結論に至りました。
調べた感じ、komamitsu.log様に書いてあった方法が最も簡潔だったので実行です。
# 全historyを落としてきたら重すぎるので、HEADだけ取得。 # ギットギットしすぎ。 git clone --depth=1 https://github.com/git/git.git cd git autoconf sudo aptitude install libcurl4-openssl-dev ./configure --with-openssl --with-curl make sudo make install
これで /usr/local/bin 以下に最新のgitができ、 /usr/local/libexec/git-core/ 以下に、 libcurl-gnutls に非依存の git-remote-https ができます。
これだとイケる!詳細は不明!
1. 余談
github はこんなことしなくても git clone https://github.com/… とかで clone できるし、あまつさえ push すらできる。
なぜできてるのか?と思って、 github が使ってるウェブサーバ調べてみたところ、 apache とか nginx とか書いてあるはずのところに「 GitHub.com 」って書いてあった。
独自のウェブサーバのようだ。
smokycat $ curl -is https://github.com/ | grep Server Server: GitHub.com
先ほど挙げた、stackoverflowの質問 error: gnutls_handshake() failed GIT repository も、githubに関するものだったし、 gnutls のために github はずいぶん苦心したんだろうなぁと推測しました。