gitをhttpで使いたかったけどWebDavさっさと止めてsmart-http使えば良かったって後悔した話

Git-Logo-1788C

gitは本当に色んな人つかってますよね。
仕事では今までSVNを使っていたのですが、たまたま新規のプロジェクト(ちっちゃいけど)を立てるのにあたってgitを使い始めることにしました。

で、開発環境にgitをいれてソース管理する事にしたのですが22番をanyであけられないんですな。
でも小さいプロジェクトなので家とか社外の環境からもつなぎたくてなんとなくwebdavかなーと思っていました。

ところが(まぁ、webdavやめたほうがいいって言う話しも色々散見されたっていう理由もあるけど)ぜんっぜん繋がらなくて(pullできたけどpushできなくて)smart-httpを試してみたらものの15分で使えたっていう。

なんかね、最初はwebdavの方が簡単だと思ってたんですよね。
過去にwebdavたてた経験もあったし。 httpd-confDav onって書けばおわりっしょ? とか軽く見てました。
けどハマるハマる。 3時間くらいハマって。。。。
あきらめたw

ところが、smart-httpにしたら15分よ。

ちなみに環境は
・CentOS5.9
・Apache2.2.34
・git1.7.9

Git-Webdavでハマったとこ1

まず、ネットで紹介されている通りにhttpd.confでgitのディレクトリをDav onに設定し、apacheをrestartする。
んでクライアント機からgit cloneしてみる。 失敗。

けどこれは、こちらのエントリーで解決できた。
http://d.hatena.ne.jp/aki-yam/20091203/1259809797

どうやら、git update-server-infoっていうコマンドがあるらしくて、何かしら更新があるたびにこのコマンドを発行しないとclone やpullができないらしい。
なんてこったい。

で、cloneできた。 よかたよかた。

Git-Webdavでハマったこと2

cloneできたのはよかったけどpushが一向にできなかった。
もうね、ずっとapacheの吐く

 "PROPFIND /git/test.git/ HTTP/1.1" 401 401

っていうログとの格闘。
何回か海外のQAサイトっぽいところまで覗きにいったけどダメでした。
そもそも PROPFINDメソッドの401を疑って http-dav.confの中身と格闘したのが間違いだったのかもしれない。
401出てるからバンバン制限はずしていって試したけど一向に改善の余地なし。

んー 事態が進展しねーぜ って思って試しにsmart-httpはどうなんだろ?って試したくなった。

Smart Http一瞬で動く

うわぁぁぁ。 最初からこっちにしてればよかった。。ってくらい分かりやすい。
いや、 なんていうのかな、分かりやすいんだよね。 とても。

httpsでのやり方が結構検索ででてきましたがhttpで良かったので以下で無事接続できました。

git.confを用意する

apacheのconfが入ってるディレクトリにgit.confとか名前をつけてテキストファイルを保存します。
http.confの適当なとこにちゃんと読み込んでくださいね と以下の記述を書いておきます。
Include conf/git.conf
けど、書かなくてもいいのかな。 (apacheあまり詳しくないサーセン)

で、git.confの中身は以下みたいな感じでOK

SetEnv GIT_PROJECT_ROOT /usr/local/git
SetEnv GIT_HTTP_EXPORT_ALL

ScriptAlias /git/ /usr/local/libexec/git-core/git-http-backend/

<locationMatch "/git">
   AuthType Basic
   AuthName "Git Area"
   AuthUserFile /usr/local/apache2/htdocs/.htpasswd
   require valid-user
   Order allow,deny
   Allow from all
</locationMatch>

かめだ
とてもシンプルでした。 各項目の意味は概ね以下のよう

GIT_PROJECT_ROOT

GIT_PROJECT_ROOTでリモートリポジトリのいるディレクトリパスを指定します。
/usr/local/git/test.git がリポジトリのpathだったら /usr/local/git  でOK

ScriptAlias

これは、クライアントからgitのコマンドを要求された時にapacheさんにこれ叩いてねってお願いする呪文らしい。
今回、URLは ~~/git/test.git とかそーゆーのになるので
/git ⇒ これにAliasを張ります。 git-http-backend っていうファイルをlocteコマンドでさがせばすぐに出てきますのでこれに向けます。
自分の環境では/usr/local/libexec/git-coreの下にいました。

あとは普段Basic認証とかで書いているようなディレクティブを書いておけばOK

Allow Denyも忘れずに

環境にもよると思いますが
Order allow, deny
Allow from all
の記述を入れないと401だか403がパコパコ出るかも。
httpd.confの別のディレクティブに書いてたからか、自分の場合は最初出た。

パーミッションいじってhttpdをrestart

最後にgit.confのパーミッションっていうかUser権限をapacheにあわせてrestartすれば繋がるでしょう。
とても簡単ですね。

さいごに

smart httpの方がなぜイケてるのかは、色んなサイトで紹介されているので譲りますが「スピードがこっちの方が速い」というのはマジでした。

webdavでcloneできたときもそうですが、そもそも認証中もモタッモタしてたんですがsmart-httpを最初つないだときはマジ早かったです。

webdavで悪戦苦闘している人が他にもいたらー。。 と思ってエントリーですた。

2013-06-17 | Posted in サーバー小ネタ(Linux)No Comments » 


関連記事

Comment





Comment



*