git/Documentation/config/url.txt

url.<base>.insteadOf::
	Any URL that starts with this value will be rewritten to
	start, instead, with <base>. In cases where some site serves a
	large number of repositories, and serves them with multiple
	access methods, and some users need to use different access
	methods, this feature allows people to specify any of the
	equivalent URLs and have Git automatically rewrite the URL to
	the best alternative for the particular user, even for a
	never-before-seen repository on the site.  When more than one
	insteadOf strings match a given URL, the longest match is used.
+
Note that any protocol restrictions will be applied to the rewritten
URL. If the rewrite changes the URL to use a custom protocol or remote
helper, you may need to adjust the `protocol.*.allow` config to permit
the request.  In particular, protocols you expect to use for submodules
must be set to `always` rather than the default of `user`. See the
description of `protocol.allow` above.

url.<base>.pushInsteadOf::
	Any URL that starts with this value will not be pushed to;
	instead, it will be rewritten to start with <base>, and the
	resulting URL will be pushed to. In cases where some site serves
	a large number of repositories, and serves them with multiple
	access methods, some of which do not allow push, this feature
	allows people to specify a pull-only URL and have Git
	automatically use an appropriate URL to push, even for a
	never-before-seen repository on the site.  When more than one
	pushInsteadOf strings match a given URL, the longest match is
	used.  If a remote has an explicit pushurl, Git will ignore this
	setting for that remote.