[PATCH 0/2] Add url.<base>.pushInsteadOf: URL rewriting for push only
- From
Josh Triplett <josh@joshtriplett.org>
- Date
- Sep 7, 2009, 06:59 UTC
- Message-ID
- <cover.1252306396.git.josh@joshtriplett.org>
Many sites host repositories via both git:// for fetch-only anonymous access and ssh:// for push-capable access. The "insteadOf" mechanism makes it straightforward to substitute the push-capable URLs for the pull-only URLs, which proves convenient when the site hosts many repositories using the same URL scheme. However, if you use such a substitution and you cannot use the ssh:// URLs (either because you don't have SSH access or you don't have permission to a particular repository), you cannot clone or fetch either, even though you could do so via the git:// URLs. A situation like this arises when sharing git configuration files between systems, of which only a few have SSH access to repositories.
"pushurl" provides a way to specify URLs used only for push, but this requires configuring a pushurl for each such repository. As in the rationale for insteadOf, it makes sense to configure this for all repositories hosted on a given system at once.
This patch series adds a new "pushInsteadOf" option to go with "insteadOf". pushInsteadOf allows systematically rewriting fetch-only URLs to push-capable URLs when used with push. For instance:
[url "ssh://example.org/"]
pushInsteadOf = "git://example.org/"This will allow clones of "git://example.org/path/to/repo" to subsequently push to "ssh://example.org/path/to/repo", without manually configuring pushurl for that remote.
Includes documentation for the new option, bash completion updates, and test cases (both that pushInsteadOf applies to push and that it does *not* apply to fetch).
Josh Triplett (2): Wrap rewrite globals in a struct in preparation for adding another set Add url.<base>.pushInsteadOf: URL rewriting for push only
Documentation/config.txt | 12 +++++ Documentation/urls.txt | 18 +++++++ contrib/completion/git-completion.bash | 2 +- remote.c | 80 +++++++++++++++++++------------ t/t5516-fetch-push.sh | 31 ++++++++++++ 5 files changed, 111 insertions(+), 32 deletions(-)