<repository>::
	The "remote" repository to pull from.  One of the
	following notations can be used to name the repository
	to pull from:

		Rsync URL
			rsync://remote.machine/path/to/repo.git/

		HTTP(s) URL
			http://remote.machine/path/to/repo.git/

		GIT URL
			git://remote.machine/path/to/repo.git/
			remote.machine:/path/to/repo.git/

		Local directory
			/path/to/repo.git/

	In addition to the above, as a short-hand, the name of a
	file in $GIT_DIR/remotes directory can be given; the
	named file should be in the following format:

		URL: one of the above URL format
		Push: <refspec>...
		Pull: <refspec>...

	When such a short-hand is specified in place of
	<repository> without <refspec> parameters on the command
	line, <refspec>... specified on Push lines or Pull lines
	are used for "git push" and "git fetch/pull",
	respectively.

	The name of a file in $GIT_DIR/branches directory can be
	specified as an older notation short-hand; the named
	file should contain a single line, a URL in one of the
	above formats, optionally followed by a hash '#' and the
	name of remote head (URL fragment notation).
	$GIT_DIR/branches/<remote> file that stores a <url>
	without the fragment is equivalent to have this in the
	corresponding file in the $GIT_DIR/remotes/ directory

		URL: <url>
		Pull: refs/heads/master:<remote>

	while having <url>#<head> is equivalent to

		URL: <url>
		Pull: refs/heads/<head>:<remote>

<refspec>::
	The canonical format of a <refspec> parameter is
	'+?<src>:<dst>'; that is, an optional plus '+', followed
	by the source ref, followed by a colon ':', followed by
	the destination ref.

	When used in "git push", the <src> side can be an
	arbitrary "SHA1 expression" that can be used as an
	argument to "git-cat-file -t".  E.g. "master~4" (push
	four parents before the current master head).

        For "git push", the local ref that matches <src> is used
        to fast forward the remote ref that matches <dst>.  If
        the optional plus '+' is used, the remote ref is updated
        even if it does not result in a fast forward update.

	For "git fetch/pull", the remote ref that matches <src>
	is fetched, and if <dst> is not empty string, the local
	ref that matches it is fast forwarded using <src>.
	Again, if the optional plus '+' is used, the local ref
	is updated even if it does not result in a fast forward
	update.

	Some short-cut notations are also supported.

	* For backward compatibility, "tag" is almost ignored;
          it just makes the following parameter <tag> to mean a
          refspec "refs/tags/<tag>:refs/tags/<tag>".

        * A parameter <ref> without a colon is equivalent to
          <ref>: when pulling/fetching, and <ref>:<ref> when
          pushing.  That is, do not store it locally if
          fetching, and update the same name if pushing.

-a, \--append::
	Append ref names and object names of fetched refs to the
	existing contents of $GIT_DIR/FETCH_HEAD.  Without this
	option old data in $GIT_DIR/FETCH_HEAD will be overwritten.

-f, \--force::
	Usually, the command refuses to update a local ref that is
	not an ancestor of the remote ref used to overwrite it.
	This flag disables the check.  What this means is that the
	local repository can lose commits; use it with care.
