From: Ethan Reesor Date: Mon, 11 Feb 2013 18:18:38 GMT Subject: Re: Pushing a git repository to a new server Message-ID: In-Reply-To: <20130211164518.ad0a21aff672ad0e4f03a6bb@domain007.com> On Mon, Feb 11, 2013 at 7:45 AM, Konstantin Khomoutov wrote: [...] > OK, here's the sketch. > On the server, in the home directory of your "git" user, you create a > wrapper around git-receive-pack, like this: > > # mkdir ~git/git-shell-commands > # cat >~git/git-shell-commands/git-receive-new-repo > #!/bin/sh > > set -e -u > > if [ $# -ne 1 ]; then > echo 'Missing required argument: ' >&2 > exit 1 > fi > > mkdir "$1" && git init --quiet --bare "$1" && git-receive-pack "$1" > ^D > # chmod +x $_ > > Then, on the client side, to push a new repo, you just do > > $ git push --receive-pack=git-receive-new-repo --all git@server:repo.git > > This will make `git push` to spawn not just `git receive-pack ` as > it usually does but your wrapper, which would first create and > initialize a bare repository and then spawn `git receive-pack` on it > which would then communicate with the client side and receive > everything from it. > > You could then create a client-side wrapper script or a Git alias for > such "creative pushing", like this: > > $ git config --add --global alias.push-new-repo \ > 'push --receive-pack=git-receive-new-repo --all' > > So the whole client call is now reduced to > > $ git push-new-repo git@server:repo.git Thanks, that's what I was going for.