Merge branch 'js/t6300-hardcode-main'
[git] / Documentation / git-remote.txt
1 git-remote(1)
2 =============
3
4 NAME
5 ----
6 git-remote - Manage set of tracked repositories
7
8
9 SYNOPSIS
10 --------
11 [verse]
12 'git remote' [-v | --verbose]
13 'git remote add' [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=(fetch|push)] <name> <url>
14 'git remote rename' <old> <new>
15 'git remote remove' <name>
16 'git remote set-head' <name> (-a | --auto | -d | --delete | <branch>)
17 'git remote set-branches' [--add] <name> <branch>...
18 'git remote get-url' [--push] [--all] <name>
19 'git remote set-url' [--push] <name> <newurl> [<oldurl>]
20 'git remote set-url --add' [--push] <name> <newurl>
21 'git remote set-url --delete' [--push] <name> <url>
22 'git remote' [-v | --verbose] 'show' [-n] <name>...
23 'git remote prune' [-n | --dry-run] <name>...
24 'git remote' [-v | --verbose] 'update' [-p | --prune] [(<group> | <remote>)...]
25
26 DESCRIPTION
27 -----------
28
29 Manage the set of repositories ("remotes") whose branches you track.
30
31
32 OPTIONS
33 -------
34
35 -v::
36 --verbose::
37         Be a little more verbose and show remote url after name.
38         NOTE: This must be placed between `remote` and subcommand.
39
40
41 COMMANDS
42 --------
43
44 With no arguments, shows a list of existing remotes.  Several
45 subcommands are available to perform operations on the remotes.
46
47 'add'::
48
49 Add a remote named <name> for the repository at
50 <url>.  The command `git fetch <name>` can then be used to create and
51 update remote-tracking branches <name>/<branch>.
52 +
53 With `-f` option, `git fetch <name>` is run immediately after
54 the remote information is set up.
55 +
56 With `--tags` option, `git fetch <name>` imports every tag from the
57 remote repository.
58 +
59 With `--no-tags` option, `git fetch <name>` does not import tags from
60 the remote repository.
61 +
62 By default, only tags on fetched branches are imported
63 (see linkgit:git-fetch[1]).
64 +
65 With `-t <branch>` option, instead of the default glob
66 refspec for the remote to track all branches under
67 the `refs/remotes/<name>/` namespace, a refspec to track only `<branch>`
68 is created.  You can give more than one `-t <branch>` to track
69 multiple branches without grabbing all branches.
70 +
71 With `-m <master>` option, a symbolic-ref `refs/remotes/<name>/HEAD` is set
72 up to point at remote's `<master>` branch. See also the set-head command.
73 +
74 When a fetch mirror is created with `--mirror=fetch`, the refs will not
75 be stored in the 'refs/remotes/' namespace, but rather everything in
76 'refs/' on the remote will be directly mirrored into 'refs/' in the
77 local repository. This option only makes sense in bare repositories,
78 because a fetch would overwrite any local commits.
79 +
80 When a push mirror is created with `--mirror=push`, then `git push`
81 will always behave as if `--mirror` was passed.
82
83 'rename'::
84
85 Rename the remote named <old> to <new>. All remote-tracking branches and
86 configuration settings for the remote are updated.
87 +
88 In case <old> and <new> are the same, and <old> is a file under
89 `$GIT_DIR/remotes` or `$GIT_DIR/branches`, the remote is converted to
90 the configuration file format.
91
92 'remove'::
93 'rm'::
94
95 Remove the remote named <name>. All remote-tracking branches and
96 configuration settings for the remote are removed.
97
98 'set-head'::
99
100 Sets or deletes the default branch (i.e. the target of the
101 symbolic-ref `refs/remotes/<name>/HEAD`) for
102 the named remote. Having a default branch for a remote is not required,
103 but allows the name of the remote to be specified in lieu of a specific
104 branch. For example, if the default branch for `origin` is set to
105 `master`, then `origin` may be specified wherever you would normally
106 specify `origin/master`.
107 +
108 With `-d` or `--delete`, the symbolic ref `refs/remotes/<name>/HEAD` is deleted.
109 +
110 With `-a` or `--auto`, the remote is queried to determine its `HEAD`, then the
111 symbolic-ref `refs/remotes/<name>/HEAD` is set to the same branch. e.g., if the remote
112 `HEAD` is pointed at `next`, `git remote set-head origin -a` will set
113 the symbolic-ref `refs/remotes/origin/HEAD` to `refs/remotes/origin/next`. This will
114 only work if `refs/remotes/origin/next` already exists; if not it must be
115 fetched first.
116 +
117 Use `<branch>` to set the symbolic-ref `refs/remotes/<name>/HEAD` explicitly. e.g., `git
118 remote set-head origin master` will set the symbolic-ref `refs/remotes/origin/HEAD` to
119 `refs/remotes/origin/master`. This will only work if
120 `refs/remotes/origin/master` already exists; if not it must be fetched first.
121 +
122
123 'set-branches'::
124
125 Changes the list of branches tracked by the named remote.
126 This can be used to track a subset of the available remote branches
127 after the initial setup for a remote.
128 +
129 The named branches will be interpreted as if specified with the
130 `-t` option on the `git remote add` command line.
131 +
132 With `--add`, instead of replacing the list of currently tracked
133 branches, adds to that list.
134
135 'get-url'::
136
137 Retrieves the URLs for a remote. Configurations for `insteadOf` and
138 `pushInsteadOf` are expanded here. By default, only the first URL is listed.
139 +
140 With `--push`, push URLs are queried rather than fetch URLs.
141 +
142 With `--all`, all URLs for the remote will be listed.
143
144 'set-url'::
145
146 Changes URLs for the remote. Sets first URL for remote <name> that matches
147 regex <oldurl> (first URL if no <oldurl> is given) to <newurl>. If
148 <oldurl> doesn't match any URL, an error occurs and nothing is changed.
149 +
150 With `--push`, push URLs are manipulated instead of fetch URLs.
151 +
152 With `--add`, instead of changing existing URLs, new URL is added.
153 +
154 With `--delete`, instead of changing existing URLs, all URLs matching
155 regex <url> are deleted for remote <name>.  Trying to delete all
156 non-push URLs is an error.
157 +
158 Note that the push URL and the fetch URL, even though they can
159 be set differently, must still refer to the same place.  What you
160 pushed to the push URL should be what you would see if you
161 immediately fetched from the fetch URL.  If you are trying to
162 fetch from one place (e.g. your upstream) and push to another (e.g.
163 your publishing repository), use two separate remotes.
164
165
166 'show'::
167
168 Gives some information about the remote <name>.
169 +
170 With `-n` option, the remote heads are not queried first with
171 `git ls-remote <name>`; cached information is used instead.
172
173 'prune'::
174
175 Deletes stale references associated with <name>. By default, stale
176 remote-tracking branches under <name> are deleted, but depending on
177 global configuration and the configuration of the remote we might even
178 prune local tags that haven't been pushed there. Equivalent to `git
179 fetch --prune <name>`, except that no new references will be fetched.
180 +
181 See the PRUNING section of linkgit:git-fetch[1] for what it'll prune
182 depending on various configuration.
183 +
184 With `--dry-run` option, report what branches would be pruned, but do not
185 actually prune them.
186
187 'update'::
188
189 Fetch updates for remotes or remote groups in the repository as defined by
190 `remotes.<group>`. If neither group nor remote is specified on the command line,
191 the configuration parameter remotes.default will be used; if
192 remotes.default is not defined, all remotes which do not have the
193 configuration parameter `remote.<name>.skipDefaultUpdate` set to true will
194 be updated.  (See linkgit:git-config[1]).
195 +
196 With `--prune` option, run pruning against all the remotes that are updated.
197
198
199 DISCUSSION
200 ----------
201
202 The remote configuration is achieved using the `remote.origin.url` and
203 `remote.origin.fetch` configuration variables.  (See
204 linkgit:git-config[1]).
205
206 EXIT STATUS
207 -----------
208
209 On success, the exit status is `0`.
210
211 When subcommands such as 'add', 'rename', and 'remove' can't find the
212 remote in question, the exit status is `2`. When the remote already
213 exists, the exit status is `3`.
214
215 On any other error, the exit status may be any other non-zero value.
216
217 EXAMPLES
218 --------
219
220 * Add a new remote, fetch, and check out a branch from it
221 +
222 ------------
223 $ git remote
224 origin
225 $ git branch -r
226   origin/HEAD -> origin/master
227   origin/master
228 $ git remote add staging git://git.kernel.org/.../gregkh/staging.git
229 $ git remote
230 origin
231 staging
232 $ git fetch staging
233 ...
234 From git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
235  * [new branch]      master     -> staging/master
236  * [new branch]      staging-linus -> staging/staging-linus
237  * [new branch]      staging-next -> staging/staging-next
238 $ git branch -r
239   origin/HEAD -> origin/master
240   origin/master
241   staging/master
242   staging/staging-linus
243   staging/staging-next
244 $ git switch -c staging staging/master
245 ...
246 ------------
247
248 * Imitate 'git clone' but track only selected branches
249 +
250 ------------
251 $ mkdir project.git
252 $ cd project.git
253 $ git init
254 $ git remote add -f -t master -m master origin git://example.com/git.git/
255 $ git merge origin
256 ------------
257
258
259 SEE ALSO
260 --------
261 linkgit:git-fetch[1]
262 linkgit:git-branch[1]
263 linkgit:git-config[1]
264
265 GIT
266 ---
267 Part of the linkgit:git[1] suite