Why won't git-daemon serve my repository?
I set up .git
in a directory on my local machine. I then run:
mkdir a cd a git init git daemon
When I attempt to clone the repository in a
, I get the following error:
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开发者_如何学JAVA
How can I clone my repository over the git protocol?
You need to let git-daemon
know it may export your repository:
$ 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.
A far better way is to run it from xinetd
. Create and tweak /etc/xinetd.d/git
along the lines of
# 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
}
Don't forget to sudo killall -HUP xinetd
. Now, all git repositories beneath /pub/scm
will be available to anyone who asks.
You either have to put an empty file called git-daemon-export-ok
into the repository or start git daemon
with the --export-all
option.
Quote from the git-daemon man page:
It verifies that the directory has the magic file "git-daemon-export-ok", and it will refuse to export any git directory that hasn't explicitly been marked for export this way (unless the --export-all parameter is specified). If you pass some directory paths as git daemon arguments, you can further restrict the offers to a whitelist comprising of those.
精彩评论