From: Jay Soffian Date: Tue, 03 Mar 2009 07:37:34 GMT Subject: Re: Subject: [PATCH] Push to create Message-ID: <76718490903022337n79a0c11cw95e80d99cd598d17@mail.gmail.com> In-Reply-To: <20090303070937.GB30609@coredump.intra.peff.net> On Tue, Mar 3, 2009 at 2:09 AM, Jeff King wrote: > If you are going to limit it in that way, wouldn't it be better to do it > entirely client-side? As in, "git push --create remote" will literally > do: > >    ssh remote_host "mkdir -p remote_dir && cd remote_dir && git init --bare" > > ? Then you don't have to care about whether the remote side is recent > enough to support this, and there are no potential security issues; git > is merely saving you from typing the commands you could have done > yourself. So I was curious how Mercurial implemented this, and it is similar to what Junio coded. It runs "hg init" on the remote end via ssh. (hg init takes care of creating the directory; I just also noticed you can do hg init ssh://host/path to create the repo remotely, which is I guess sorta interesting.) > I think a featur like this needs to be triggered manually via > "--create" or similar. Otherwise a typo on a regular push will be very > confusing as your pushes appear to go nowhere. Though I suppose most > regular pushes happen using a configured remote, in which case it is not > as much of an issue. So I could've sworn Mercurial creates a remote repo for you on push, but it turns out it does not: $ hg push ssh://localhost/~/bar remote: abort: There is no Mercurial repository here (.hg not found)! abort: no suitable response from remote hg! I concur w/Jeff and I think git probably should not as well. I think that instead adding it to init might be interesting "git init " where is local (and it creates the directory and repo for you) or arg is ssh://... and it creates the dir and repo over there for you. And have "git push" abort with a friendlier message than: fatal: '~/bar': unable to chdir or not a git archive fatal: The remote end hung up unexpectedly If that's a plumbing message maybe it can't change, unless push swallows it and says something nicer like: fatal: '~/bar' not a git repository. Create the destination repository with "git init" before pushing. We can be even friendlier than Mercurial. :-) j.