我在本地计算机上的目录中设置了.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协议克隆我的存储库?
答案 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守护进程参数,你可以进一步 将要约限制为白名单 包括那些。