おのたく日記 YouTubeも始めました→
2009-06-21(Sun) git-daemonでリポジトリを公開する。 [長年日記]
■ [git][Debian]git-daemonでリポジトリを公開する。
昨日の日記でgitを使い始めたことを書いたけど、RCSみたいなローカルだけの使い方だけではおもしろくないので公開用のリポジトリに挑戦した。
Debianでは、パッケージ: git-daemon-runをインストールすると、git clone git://localhost/git/... で取れるようにするためのgit-daemonが動き出す。
このパッケージやパッケージ: gitwebでは、/var/cache/git にリポジトリが有ることを期待しているので、
# cd /var/cache/git
# ln -s ~user/src/git-test/.git git-test.git
と実際のgitリポジトリまでのシンボリックリンクを張ってあげる必要がある。
gitwebは、これで見えるようになったんだけどgit cloneしようとすると
$ git clone git://localhost/git/git-test.git
Initialized empty Git repository in /home/user/src/clone-test/.git/
fatal: The remote end hung up unexpectedly
とエラーになってしまう。サーバ側には
2009-06-21_04:47:23.94637 [12345] Connection from 192.168.0.1:61491
2009-06-21_04:47:23.94651 [12345] Extended attributes (15 bytes) exist
2009-06-21_04:47:23.94782 [12345] Request upload-pack for /git/git-test.git
2009-06-21_04:47:23.94983 [12345] /var/cache/git/git-test.git: repository not exported.
2009-06-21_04:47:23.94984 [1234] [12345] Disconnected (with error)
[/var/log/git-daemon/currentより引用]
とログにエラー「repository not exported.」出てしまう。これは
$ touch /var/cache/git/git-test.git/git-daemon-export-ok
とすると
$ git clone git://on-o.com/git/local-git-test.git
Initialized empty Git repository in /home/user/src/clone-test/.git/
remote: Counting objects: 32, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 32 (delta 5), reused 32 (delta 5)
Receiving objects: 100% (32/32), done.
Resolving deltas: 100% (5/5), done.
とうまくいうようになった。
参考: Re: libpng.git hosting via sourceforge
公開用のリポジトリを作るには
$ git clone --bare ~/proj proj.git
$ touch proj.git/git-daemon-export-ok
[Git ユーザマニュアル - git リポジトリの公開より引用]
というのが正しいお作法らしい。
さて取れたから、pushも出来るだろうと思ってpushすると
$ git push
warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default action in this
warning: case is to push all matching refspecs, that is, all branches
warning: that exist both locally and remotely will be updated. This may
warning: not necessarily be what you want to happen.
warning:
warning: You can specify what action you want to take in this case, and
warning: avoid seeing this message again, by configuring 'push.default' to:
warning: 'nothing' : Do not push anything
warning: 'matching' : Push all matching branches (default)
warning: 'tracking' : Push the current branch to whatever it is tracking
warning: 'current' : Push the current branch
とエラーになる。
git-daemonの起動時にreceive-packを有効にしておけば良さそう。
[[git-daemon]git-pushすると「fatal: The remote end hung up unexpectedly」というエラーが発生するより引用]
てことだ…
■ [git]「パッケージ: git-daemon-run」イヤになったのでinetdでgit-daemonを起動する
git-daemon-runパッケージだが、exportやらrecive-packやら色々設定が必要なのと、いつも必要なわけではないのに立ち上がりっぱなしというのがイヤになって、inetdで立ち上げることにする。
git 9418/tcp # Git Version Control System
[/etc/servicesより引用]
を追加するのが正しいんだろうけどservicesには登録せず直接port番号で
# update-inetd --add "9418 stream tcp nowait gitdaemon.nobody /usr/sbin/tcpd /usr/lib/git-core/git-daemon --enable=receive-pack --syslog --inetd --verbose --base-path=/var/cache /var/cache/git"
として、inetdでgit-daemonを起動するようにした。
※--export-allをつけようか悩んだけどgitwebで見たいだけのものも有るのでつけないことにした。
/var/cache/git以下のファイルにはgitdaemonユーザへの書き込み権限を与えるとpushできるようになった。
今後はcloneやpushが必要なセントラルリポジトリを作るときには
$ cd /var/cache/git
$ git clone --bare <ローカルなリポジトリ>/.git
$ touch git-daemon-export-ok ←これをやらないとclone禁止 gitwebのみ
$ chown -R gitdaemon . ←これをやらないとpush禁止
とする。
|