Code

Documentation update for user-relative paths.
[git.git] / Documentation / pull-fetch-param.txt
1 <repository>::
2         The "remote" repository that is the source of a fetch
3         or pull operation, or the destination of a push operation.
4         One of the following notations can be used
5         to name the remote repository:
6 +
7 ===============================================================
8 - rsync://host.xz/path/to/repo.git/
9 - http://host.xz/path/to/repo.git/
10 - https://host.xz/path/to/repo.git/
11 - git://host.xz/path/to/repo.git/
12 - ssh://host.xz/path/to/repo.git/
13 - ssh://host.xz/~user/path/to/repo.git/
14 - ssh://host.xz/~/path/to/repo.git
15 ===============================================================
16 +
17         SSH Is the default transport protocol and also supports an
18         scp-like syntax.  Both syntaxes support username expansion.
19         The following three are identical to the last three above,
20         respectively:
21 +
22 ===============================================================
23 - host.xz:/path/to/repo.git/
24 - host.xz:~user/path/to/repo.git/
25 - host.xz:path/to/repo.git
26 ===============================================================
27 +
28        To sync with a local directory, use:
30 ===============================================================
31 - /path/to/repo.git/
32 ===============================================================
33 +
34 In addition to the above, as a short-hand, the name of a
35 file in `$GIT_DIR/remotes` directory can be given; the
36 named file should be in the following format:
37 +
38         URL: one of the above URL format
39         Push: <refspec>
40         Pull: <refspec>
41 +
42 When such a short-hand is specified in place of
43 <repository> without <refspec> parameters on the command
44 line, <refspec> specified on `Push:` lines or `Pull:`
45 lines are used for `git-push` and `git-fetch`/`git-pull`,
46 respectively.  Multiple `Push:` and and `Pull:` lines may
47 be specified for additional branch mappings.
48 +
49 The name of a file in `$GIT_DIR/branches` directory can be
50 specified as an older notation short-hand; the named
51 file should contain a single line, a URL in one of the
52 above formats, optionally followed by a hash `#` and the
53 name of remote head (URL fragment notation).
54 `$GIT_DIR/branches/<remote>` file that stores a <url>
55 without the fragment is equivalent to have this in the
56 corresponding file in the `$GIT_DIR/remotes/` directory.
57 +
58         URL: <url>
59         Pull: refs/heads/master:<remote>
60 +
61 while having `<url>#<head>` is equivalent to
62 +
63         URL: <url>
64         Pull: refs/heads/<head>:<remote>
66 <refspec>::
67         The canonical format of a <refspec> parameter is
68         `+?<src>:<dst>`; that is, an optional plus `+`, followed
69         by the source ref, followed by a colon `:`, followed by
70         the destination ref.
71 +
72 When used in `git-push`, the <src> side can be an
73 arbitrary "SHA1 expression" that can be used as an
74 argument to `git-cat-file -t`.  E.g. `master~4` (push
75 four parents before the current master head).
76 +
77 For `git-push`, the local ref that matches <src> is used
78 to fast forward the remote ref that matches <dst>.  If
79 the optional plus `+` is used, the remote ref is updated
80 even if it does not result in a fast forward update.
81 +
82 For `git-fetch` and `git-pull`, the remote ref that matches <src>
83 is fetched, and if <dst> is not empty string, the local
84 ref that matches it is fast forwarded using <src>.
85 Again, if the optional plus `+` is used, the local ref
86 is updated even if it does not result in a fast forward
87 update.
88 +
89 [NOTE]
90 If the remote branch from which you want to pull is
91 modified in non-linear ways such as being rewound and
92 rebased frequently, then a pull will attempt a merge with
93 an older version of itself, likely conflict, and fail.
94 It is under these conditions that you would want to use
95 the `+` sign to indicate non-fast-forward updates will
96 be needed.  There is currently no easy way to determine
97 or declare that a branch will be made available in a
98 repository with this behavior; the pulling user simply
99 must know this is the expected usage pattern for a branch.
101 [NOTE]
102 You never do your own development on branches that appear
103 on the right hand side of a <refspec> colon on `Pull:` lines;
104 they are to be updated by `git-fetch`.  If you intend to do
105 development derived from a remote branch `B`, have a `Pull:`
106 line to track it (i.e. `Pull: B:remote-B`), and have a separate
107 branch `my-B` to do your development on top of it.  The latter
108 is created by `git branch my-B remote-B` (or its equivalent `git
109 checkout -b my-B remote-B`).  Run `git fetch` to keep track of
110 the progress of the remote side, and when you see something new
111 on the remote branch, merge it into your development branch with
112 `git pull . remote-B`, while you are on `my-B` branch.
113 The common `Pull: master:origin` mapping of a remote `master`
114 branch to a local `origin` branch, which is then merged to a
115 ocal development branch, again typically named `master`, is made
116 when you run `git clone` for you to follow this pattern.
118 [NOTE]
119 There is a difference between listing multiple <refspec>
120 directly on `git-pull` command line and having multiple
121 `Pull:` <refspec> lines for a <repository> and running
122 `git-pull` command without any explicit <refspec> parameters.
123 <refspec> listed explicitly on the command line are always
124 merged into the current branch after fetching.  In other words,
125 if you list more than one remote refs, you would be making
126 an Octopus.  While `git-pull` run without any explicit <refspec>
127 parameter takes default <refspec>s from `Pull:` lines, it
128 merges only the first <refspec> found into the current branch,
129 after fetching all the remote refs.  This is because making an
130 Octopus from remote refs is rarely done, while keeping track
131 of multiple remote heads in one-go by fetching more than one
132 is often useful.
134 Some short-cut notations are also supported.
136 * For backward compatibility, `tag` is almost ignored;
137   it just makes the following parameter <tag> to mean a
138   refspec `refs/tags/<tag>:refs/tags/<tag>`.
139 * A parameter <ref> without a colon is equivalent to
140   <ref>: when pulling/fetching, and <ref>`:`<ref> when
141   pushing.  That is, do not store it locally if
142   fetching, and update the same name if pushing.