Re: Subject: [PATCH] Push to create
- From
Jay Soffian <jaysoffian@gmail.com>
- Date
- Mar 3, 2009, 07:37 UTC
- 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 <peff@peff.net> wrote:
Show 10 quoted lines
> 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 <path> 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.)
Show 5 quoted lines
> 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 <arg>" where <arg> 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.