branch --track: code cleanup and saner handling of local branches

This patch cleans up some complicated code, and replaces it with a
cleaner version, using code from remote.[ch], which got extended a
little in the process.  This also enables us to fix two cases:

The earlier "fix" to setup tracking only when the original ref started
with "refs/remotes" is wrong.  You are absolutely allowed to use a
separate layout for your tracking branches.  The correct fix, of course,
is to set up tracking information only when there is a matching
remote.<nick>.fetch line containing a colon.

Another corner case was not handled properly.  If two remotes write to
the original ref, just warn the user and do not set up tracking.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johannes Schindelin
2007-07-10 18:50:44 +01:00
committed by Junio C Hamano
parent b42f69273b
commit 6f084a56fc
4 changed files with 68 additions and 131 deletions

View File

@ -309,10 +309,7 @@ branch.autosetupmerge::
so that gitlink:git-pull[1] will appropriately merge from that
remote branch. Note that even if this option is not set,
this behavior can be chosen per-branch using the `--track`
and `--no-track` options. This option can have values
'false' (never touch the configuration), 'all' (do this
for all branches), or 'true' (do this only when
branching from a remote tracking branch), and defaults to 'true'.
and `--no-track` options. This option defaults to false.
branch.<name>.remote::
When in branch <name>, it tells `git fetch` which remote to fetch.

View File

@ -52,9 +52,8 @@ OPTIONS
set up configuration so that git-pull will automatically
retrieve data from the remote branch. Set the
branch.autosetupmerge configuration variable to true if you
want git-checkout and git-branch to behave as if
'--track' were given when you branch from a remote
tracking branch.
want git-checkout and git-branch to always behave as if
'--track' were given.
--no-track::
When -b is given and a branch is created off a remote branch,