最近、でもないかもしれないけど、ソースコード管理に git を使うようになりました。
あまり、ソースコード管理する場面を個人的には感じられず、今まであまり使ったことなかったのですが、使ってみると非常に便利ですね。
ちなみに、僕は svn も cvs も、ほんの少ししか触ったことなくて、そのおかげか? git の導入は非常にスムーズでした。
僕は、家と大学と、いろいろなところでちょこちょこ開発してます。なので、リモートリポジトリがあると非常に便利です。
今までは、github を使っていました。が、github はお金払わないと private なリポジトリは作成できないのです。
あまり、public にしたくないようなものを開発したいときもあるので、今回は家のサーバーにリモートリポジトリを構築してみました。
忘れそうなので、軽く手順を。
まず、サーバーに git のリポジトリを作成しましょう。
僕は、git というユーザーを作って ~git/repos に置くことにしました。
/var/repos とかにあるのもありかもしれません。
まあ、置き場所とかユーザーはご自由にどうぞ。
んで、慣例でリモートリポジトリのディレクトリは "hogehoge.git" なディレクトリで作るらしい。
たとえば、hogehoge というプロジェクトのリポジトリを作る場合
$ cd ~git/repos
$ mkdir hogehoge.git
$ cd hogehoge.git
$ git init --bare
みたいな流れで。
--bare は見慣れないかもしれないけど、これは bare リポジトリを作るって意味で、普通 .git の下にある管理情報とかのファイルが、そのディレクトリに展開される。
なんでかって、そもそもリモートリポジトリに、編集するためのファイルはいらないから、管理情報だけでいい。
で、あとは、ローカルにあるリポジトリを push します。
まずは、remote を登録しなければいけないので、add します。
$ cd project
$ git remote add origin git@git.example.com:repos/hogehoge.git
$ git push origin master
これで push できます。
接続には、デフォルトでは ssh を使うようになってます。
鍵とか、パスワードとか、認証がかかりますのでご注意を。
って、あっけなさすぎる...
実は、git は ssh 使えればこんなに簡単にリモートリポジトリを構築できてしまうんです。
しかし、今回はこれでは終わらない。
ssh 使いたくないので、git:// でつなぎたいと思います。
(使えないわけではないけど、使いづらいある事情がうちのサーバーにはある)
なので、git-daemon が必要です。
Debian の場合、aptitude から簡単に git-daemon 自体は導入できます。
# aptitude install git-daemon-run
で ok です。
"/etc/sv/git-daemon/run" をいじります。
いじるのは、最後の1行だけで
exec git-daemon --verbose --base-path=/home/git/repos --export-all --enable=receive-pack --user=git
僕はこんな感じにしてますが、正直 "非推薦" です。
- --base-path
リポジトリがある場所を指定します。 - --export-all
誰でも、どのリポジトリも git clone できるようにします。 - --enable=receive-pack
誰でも、git push できるようにします。 - --user=git
git ユーザーで daemon を動かします。
と、まあ、ご利用は計画的に。
ちなみに、git プロトコルを使って push するには、こうするしかありませんので、しょうがない。
それと、--user を指定しないと、root で動くようになっていて、push したときに所有者が root になってしまうので、こうしてます。
その他の詳しいオプションなどは、`man git-daemon` をどうぞ。
git-daemon の起動、終了は
# sv stop git-daemon
# sv start git-daemon
な感じです。
git プロトコルのポート番号は、9418/tcp を使うようです。
で、git:// を使って push するには
$ git remote add origin git://git.example.com/hogehoge.git
$ git push origin master
これで完璧。
ここまでやれば
$ git clone git@git.example.com:repos/hogehoge.git #ssh
$ git clone git://git.example.com/hogehoge.git #git
どちらでもできるようになる。
下なら、誰でも clone できる。(認証必要なし
まあ、結論として、public にする必要がないプロジェクトなら git:// を使う意味は全くない。
ssh で十分ですねーって。
public にして、不特定多数から push を受けたいなら git プロトコルが必要だけど。
あれ、今回の目的は、public にしたいプロジェクトを置きたかったからじゃ?
気にしない。


コメントする