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