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
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.