From: Jeff King <peff@peff.net>
To: fuz@fuz.su
Cc: git@vger.kernel.org
Subject: Re: Bugreport: git push disobeys -c remote.xxx.url=...
Date: Thu, 29 May 2014 21:43:59 -0400 [thread overview]
Message-ID: <20140530014359.GF28683@sigill.intra.peff.net> (raw)
In-Reply-To: <20140530000356.GA8033@fuz.su>
On Fri, May 30, 2014 at 02:03:56AM +0200, fuz@fuz.su wrote:
> I've tried to changing the URL of a remote temporarily because of network
> issues. I tried something like this:
>
> git -c remote.foo.url=http://gitserver.example/repo.git push foo bar
>
> Tracing shows that git push does not use the provided URL for the remote foo
> and instead uses the URL configured in the repository configuration as if the
> -c option was not present at all. This looks like a bug to me.
You are correct that this won't work, but the reason is a bit
complicated.
The remote.*.url config field is actually a "multivar", meaning that you
can specify it multiple times. In that case, "git push" will push to
each configured URL in order in which they appear in the config.
In the command above you are not overwriting remote.foo.url, but rather
adding an extra value to it. So we first try to push to the remote
defined in your actual config, and then to the one on the command-line.
You can see this in action like:
$ git init --bare /tmp/foo
$ git init --bare /tmp/bar
$ git remote add foo /tmp/foo
$ git -c remote.foo.url=/tmp/bar push foo HEAD
You should see pushes to both /tmp/foo and /tmp/bar.
Config multivars like this are rather hard to work with, as there is no
way to say "reset the multivar to empty, _then_ add this new value". So
there isn't a simple solution using remote.*.url from the command-line
like this.
Another way of doing what you want is to use url.*.insteadOf, like:
git -c url./tmp/bar.insteadof=/tmp/foo push foo HEAD
-Peff
prev parent reply other threads:[~2014-05-30 1:44 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-30 0:03 Bugreport: git push disobeys -c remote.xxx.url= fuz
2014-05-30 1:43 ` Jeff King [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140530014359.GF28683@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=fuz@fuz.su \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).