Junio C Hamano | 40f2f8d | 2006-02-07 08:04:39 | [diff] [blame] | 1 | GIT URLS[[URLS]] |
| 2 | ---------------- |
| 3 | |
Junio C Hamano | 0c053e8 | 2010-04-19 06:46:34 | [diff] [blame] | 4 | In general, URLs contain information about the transport protocol, the |
| 5 | address of the remote server, and the path to the repository. |
| 6 | Depending on the transport protocol, some of this information may be |
| 7 | absent. |
Junio C Hamano | 40f2f8d | 2006-02-07 08:04:39 | [diff] [blame] | 8 | |
Junio C Hamano | 6631a09 | 2012-10-10 22:50:57 | [diff] [blame] | 9 | Git supports ssh, git, http, and https protocols (in addition, ftp, |
Junio C Hamano | f85ef63 | 2016-02-17 22:31:06 | [diff] [blame] | 10 | and ftps can be used for fetching, but this is inefficient and |
| 11 | deprecated; do not use it). |
Junio C Hamano | 6631a09 | 2012-10-10 22:50:57 | [diff] [blame] | 12 | |
Junio C Hamano | a195230 | 2013-07-01 21:31:18 | [diff] [blame] | 13 | The native transport (i.e. git:// URL) does no authentication and |
| 14 | should be used with caution on unsecured networks. |
| 15 | |
Junio C Hamano | 6631a09 | 2012-10-10 22:50:57 | [diff] [blame] | 16 | The following syntaxes may be used with them: |
Junio C Hamano | 0c053e8 | 2010-04-19 06:46:34 | [diff] [blame] | 17 | |
Junio C Hamano | dbb6459 | 2007-09-01 11:17:39 | [diff] [blame] | 18 | - ssh://{startsb}user@{endsb}host.xz{startsb}:port{endsb}/path/to/repo.git/ |
Junio C Hamano | 0c053e8 | 2010-04-19 06:46:34 | [diff] [blame] | 19 | - git://host.xz{startsb}:port{endsb}/path/to/repo.git/ |
| 20 | - http{startsb}s{endsb}://host.xz{startsb}:port{endsb}/path/to/repo.git/ |
| 21 | - ftp{startsb}s{endsb}://host.xz{startsb}:port{endsb}/path/to/repo.git/ |
Junio C Hamano | 40f2f8d | 2006-02-07 08:04:39 | [diff] [blame] | 22 | |
Junio C Hamano | 0c053e8 | 2010-04-19 06:46:34 | [diff] [blame] | 23 | An alternative scp-like syntax may also be used with the ssh protocol: |
Junio C Hamano | 40f2f8d | 2006-02-07 08:04:39 | [diff] [blame] | 24 | |
Junio C Hamano | 0c053e8 | 2010-04-19 06:46:34 | [diff] [blame] | 25 | - {startsb}user@{endsb}host.xz:path/to/repo.git/ |
Junio C Hamano | 40f2f8d | 2006-02-07 08:04:39 | [diff] [blame] | 26 | |
Junio C Hamano | 7e590a1 | 2013-06-02 23:46:52 | [diff] [blame] | 27 | This syntax is only recognized if there are no slashes before the |
| 28 | first colon. This helps differentiate a local path that contains a |
| 29 | colon. For example the local path `foo:bar` could be specified as an |
| 30 | absolute path or `./foo:bar` to avoid being misinterpreted as an ssh |
| 31 | url. |
| 32 | |
Junio C Hamano | 0c053e8 | 2010-04-19 06:46:34 | [diff] [blame] | 33 | The ssh and git protocols additionally support ~username expansion: |
| 34 | |
| 35 | - ssh://{startsb}user@{endsb}host.xz{startsb}:port{endsb}/~{startsb}user{endsb}/path/to/repo.git/ |
| 36 | - git://host.xz{startsb}:port{endsb}/~{startsb}user{endsb}/path/to/repo.git/ |
| 37 | - {startsb}user@{endsb}host.xz:/~{startsb}user{endsb}/path/to/repo.git/ |
| 38 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 39 | For local repositories, also supported by Git natively, the following |
Junio C Hamano | 0c053e8 | 2010-04-19 06:46:34 | [diff] [blame] | 40 | syntaxes may be used: |
Junio C Hamano | 40f2f8d | 2006-02-07 08:04:39 | [diff] [blame] | 41 | |
Junio C Hamano | 40f2f8d | 2006-02-07 08:04:39 | [diff] [blame] | 42 | - /path/to/repo.git/ |
Junio C Hamano | dc8f8de | 2013-06-05 22:58:07 | [diff] [blame] | 43 | - \file:///path/to/repo.git/ |
Junio C Hamano | b1d6e88 | 2007-08-11 08:30:16 | [diff] [blame] | 44 | |
Junio C Hamano | 63777e2 | 2007-11-17 20:52:16 | [diff] [blame] | 45 | ifndef::git-clone[] |
Junio C Hamano | 0c053e8 | 2010-04-19 06:46:34 | [diff] [blame] | 46 | These two syntaxes are mostly equivalent, except when cloning, when |
| 47 | the former implies --local option. See linkgit:git-clone[1] for |
| 48 | details. |
Junio C Hamano | 63777e2 | 2007-11-17 20:52:16 | [diff] [blame] | 49 | endif::git-clone[] |
| 50 | |
| 51 | ifdef::git-clone[] |
Junio C Hamano | 0c053e8 | 2010-04-19 06:46:34 | [diff] [blame] | 52 | These two syntaxes are mostly equivalent, except the former implies |
| 53 | --local option. |
Junio C Hamano | 63777e2 | 2007-11-17 20:52:16 | [diff] [blame] | 54 | endif::git-clone[] |
Junio C Hamano | 24bc09a | 2008-02-28 00:27:44 | [diff] [blame] | 55 | |
Junio C Hamano | 076ffcc | 2013-02-06 05:13:21 | [diff] [blame] | 56 | When Git doesn't know how to handle a certain transport protocol, it |
Junio C Hamano | 0c053e8 | 2010-04-19 06:46:34 | [diff] [blame] | 57 | attempts to use the 'remote-<transport>' remote helper, if one |
| 58 | exists. To explicitly request a remote helper, the following syntax |
| 59 | may be used: |
| 60 | |
| 61 | - <transport>::<address> |
| 62 | |
| 63 | where <address> may be a path, a server and path, or an arbitrary |
| 64 | URL-like string recognized by the specific remote helper being |
Junio C Hamano | b5e079f | 2013-02-08 00:02:52 | [diff] [blame] | 65 | invoked. See linkgit:gitremote-helpers[1] for details. |
Junio C Hamano | 24bc09a | 2008-02-28 00:27:44 | [diff] [blame] | 66 | |
| 67 | If there are a large number of similarly-named remote repositories and |
| 68 | you want to use a different format for them (such that the URLs you |
| 69 | use will be rewritten into URLs that work), you can create a |
| 70 | configuration section of the form: |
| 71 | |
| 72 | ------------ |
| 73 | [url "<actual url base>"] |
| 74 | insteadOf = <other url base> |
| 75 | ------------ |
| 76 | |
| 77 | For example, with this: |
| 78 | |
| 79 | ------------ |
| 80 | [url "git://git.host.xz/"] |
| 81 | insteadOf = host.xz:/path/to/ |
| 82 | insteadOf = work: |
| 83 | ------------ |
| 84 | |
| 85 | a URL like "work:repo.git" or like "host.xz:/path/to/repo.git" will be |
| 86 | rewritten in any context that takes a URL to be "git://git.host.xz/repo.git". |
| 87 | |
Junio C Hamano | 7df6dcf | 2009-09-13 09:51:17 | [diff] [blame] | 88 | If you want to rewrite URLs for push only, you can create a |
| 89 | configuration section of the form: |
| 90 | |
| 91 | ------------ |
| 92 | [url "<actual url base>"] |
| 93 | pushInsteadOf = <other url base> |
| 94 | ------------ |
| 95 | |
| 96 | For example, with this: |
| 97 | |
| 98 | ------------ |
| 99 | [url "ssh://example.org/"] |
| 100 | pushInsteadOf = git://example.org/ |
| 101 | ------------ |
| 102 | |
| 103 | a URL like "git://example.org/path/to/repo.git" will be rewritten to |
| 104 | "ssh://example.org/path/to/repo.git" for pushes, but pulls will still |
| 105 | use the original URL. |