为什么git-daemon不能为我的存储库服务?

时间:2010-03-29 13:03:15

标签: git git-daemon

我在本地计算机上的目录中设置了.git。然后我跑:

mkdir a
cd a
git init
git daemon

当我尝试在a中克隆存储库时,出现以下错误:

mkdir b
cd b
git clone git://127.0.0.1
Initialized empty Git repository in /b/127.0.0.1/.git/
fatal: The remote end hung up unexpectedly

如何通过git协议克隆我的存储库?

2 个答案:

答案 0 :(得分:43)

您需要让git-daemon知道它可能会导出您的存储库:

$ git init --bare /tmp/my-repo.git
Initialized empty Git repository in /tmp/my-repo.git/

$ git daemon --verbose --base-path=/tmp --export-all /tmp/my-repo.git &

$ git clone git://`hostname`/my-repo.git
Initialized empty Git repository in /tmp/my-repo/.git/
warning: You appear to have cloned an empty repository.

更好的方法是从xinetd运行它。按照

的方式创建和调整/etc/xinetd.d/git
# description: The git server offers access to git repositories
service git
{
        disable = no
        type            = UNLISTED
        port            = 9418
        socket_type     = stream
        wait            = no
        user            = nobody
        server          = /usr/local/bin/git
        server_args     = daemon --inetd --export-all --base-path=/pub/scm
        log_on_failure  += USERID
}

不要忘记sudo killall -HUP xinetd。现在,/pub/scm下面的所有git存储库都可供任何要求的人使用。

答案 1 :(得分:13)

您必须将名为git-daemon-export-ok的空文件放入存储库,或使用git daemon选项启动--export-all

来自git-daemon man page的引用:

  

它验证目录是否具有   魔术文件“git-daemon-export-ok”,和   它会拒绝输出任何git   没有显式的目录   以这种方式标记出口(除非    - 指定了--export-all参数)。如果您传递一些目录路径为   git守护进程参数,你可以进一步   将要约限制为白名单   包括那些。