Documentation / urls.txton commit merge-trees: let caller decide whether to renormalize (1bc0ab7)
   1GIT URLS[[URLS]]
   2----------------
   3
   4In general, URLs contain information about the transport protocol, the
   5address of the remote server, and the path to the repository.
   6Depending on the transport protocol, some of this information may be
   7absent.
   8
   9Git natively supports ssh, git, http, https, ftp, ftps, and rsync
  10protocols. The following syntaxes may be used with them:
  11
  12- ssh://{startsb}user@{endsb}host.xz{startsb}:port{endsb}/path/to/repo.git/
  13- git://host.xz{startsb}:port{endsb}/path/to/repo.git/
  14- http{startsb}s{endsb}://host.xz{startsb}:port{endsb}/path/to/repo.git/
  15- ftp{startsb}s{endsb}://host.xz{startsb}:port{endsb}/path/to/repo.git/
  16- rsync://host.xz/path/to/repo.git/
  17
  18An alternative scp-like syntax may also be used with the ssh protocol:
  19
  20- {startsb}user@{endsb}host.xz:path/to/repo.git/
  21
  22The ssh and git protocols additionally support ~username expansion:
  23
  24- ssh://{startsb}user@{endsb}host.xz{startsb}:port{endsb}/~{startsb}user{endsb}/path/to/repo.git/
  25- git://host.xz{startsb}:port{endsb}/~{startsb}user{endsb}/path/to/repo.git/
  26- {startsb}user@{endsb}host.xz:/~{startsb}user{endsb}/path/to/repo.git/
  27
  28For local respositories, also supported by git natively, the following
  29syntaxes may be used:
  30
  31- /path/to/repo.git/
  32- file:///path/to/repo.git/
  33
  34ifndef::git-clone[]
  35These two syntaxes are mostly equivalent, except when cloning, when
  36the former implies --local option. See linkgit:git-clone[1] for
  37details.
  38endif::git-clone[]
  39
  40ifdef::git-clone[]
  41These two syntaxes are mostly equivalent, except the former implies
  42--local option.
  43endif::git-clone[]
  44
  45When git doesn't know how to handle a certain transport protocol, it
  46attempts to use the 'remote-<transport>' remote helper, if one
  47exists. To explicitly request a remote helper, the following syntax
  48may be used:
  49
  50- <transport>::<address>
  51
  52where <address> may be a path, a server and path, or an arbitrary
  53URL-like string recognized by the specific remote helper being
  54invoked. See linkgit:git-remote-helpers[1] for details.
  55
  56If there are a large number of similarly-named remote repositories and
  57you want to use a different format for them (such that the URLs you
  58use will be rewritten into URLs that work), you can create a
  59configuration section of the form:
  60
  61------------
  62        [url "<actual url base>"]
  63                insteadOf = <other url base>
  64------------
  65
  66For example, with this:
  67
  68------------
  69        [url "git://git.host.xz/"]
  70                insteadOf = host.xz:/path/to/
  71                insteadOf = work:
  72------------
  73
  74a URL like "work:repo.git" or like "host.xz:/path/to/repo.git" will be
  75rewritten in any context that takes a URL to be "git://git.host.xz/repo.git".
  76
  77If you want to rewrite URLs for push only, you can create a
  78configuration section of the form:
  79
  80------------
  81        [url "<actual url base>"]
  82                pushInsteadOf = <other url base>
  83------------
  84
  85For example, with this:
  86
  87------------
  88        [url "ssh://example.org/"]
  89                pushInsteadOf = git://example.org/
  90------------
  91
  92a URL like "git://example.org/path/to/repo.git" will be rewritten to
  93"ssh://example.org/path/to/repo.git" for pushes, but pulls will still
  94use the original URL.