git-branch, git-checkout: autosetup for remote branch tracking

In order to track and build on top of a branch 'topic' you track from
your upstream repository, you often would end up doing this sequence:

  git checkout -b mytopic origin/topic
  git config --add branch.mytopic.remote origin
  git config --add branch.mytopic.merge refs/heads/topic

This would first fork your own 'mytopic' branch from the 'topic'
branch you track from the 'origin' repository; then it would set up two
configuration variables so that 'git pull' without parameters does the
right thing while you are on your own 'mytopic' branch.

This commit adds a --track option to git-branch, so that "git
branch --track mytopic origin/topic" performs the latter two actions
when creating your 'mytopic' branch.

If the configuration variable branch.autosetupmerge is set to true, you
do not have to pass the --track option explicitly; further patches in
this series allow setting the variable with a "git remote add" option.
The configuration variable is off by default, and there is a --no-track
option to countermand it even if the variable is set.

Signed-off-by: Paolo Bonzini  <bonzini@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Paolo Bonzini
2007-03-08 10:58:35 +01:00
committed by Junio C Hamano
parent 8a3fbdd9e6
commit 0746d19a82
7 changed files with 229 additions and 36 deletions

View File

@ -12,6 +12,7 @@ new=
new_name=
force=
branch=
track=
newbranch=
newbranch_log=
merge=
@ -33,7 +34,10 @@ while [ "$#" != "0" ]; do
die "git checkout: we do not like '$newbranch' as a branch name."
;;
"-l")
newbranch_log=1
newbranch_log=-l
;;
"--track"|"--no-track")
track="$arg"
;;
"-f")
force=1
@ -85,6 +89,11 @@ while [ "$#" != "0" ]; do
esac
done
case "$new_branch,$track" in
,--*)
die "git checkout: --track and --no-track require -b"
esac
case "$force$merge" in
11)
die "git checkout: -f and -m are incompatible"
@ -235,11 +244,7 @@ fi
#
if [ "$?" -eq 0 ]; then
if [ "$newbranch" ]; then
if [ "$newbranch_log" ]; then
mkdir -p $(dirname "$GIT_DIR/logs/refs/heads/$newbranch")
touch "$GIT_DIR/logs/refs/heads/$newbranch"
fi
git-update-ref -m "checkout: Created from $new_name" "refs/heads/$newbranch" $new || exit
git-branch $track $newbranch_log "$newbranch" "$new_name" || exit
branch="$newbranch"
fi
if test -n "$branch"