↑日記で日々積み重ねた情報をトップの「わんこのページ」にまとめています。

おのたく日記 [RDF] 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禁止

とする。

本日のPingbacks(全0件)

Google Web検索 on-o.com内を検索