mirror of
https://github.com/git/git
synced 2024-08-24 18:26:02 +00:00
Enable ref log creation in git checkout -b.
Switch git checkout -b to use git-update-ref rather than echo and a shell I/O redirection. This is more in line with typical GIT commands and allows -b to be logged according to the normal ref logging rules. Added -l option to allow users to create the ref log at the same time as creating a branch. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
3a4b3f269c
commit
969d326d6b
|
@ -8,7 +8,7 @@ git-checkout - Checkout and switch to a branch
|
|||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git-checkout' [-f] [-b <new_branch>] [-m] [<branch>]
|
||||
'git-checkout' [-f] [-b <new_branch> [-l]] [-m] [<branch>]
|
||||
'git-checkout' [-m] [<branch>] <paths>...
|
||||
|
||||
DESCRIPTION
|
||||
|
@ -37,6 +37,11 @@ OPTIONS
|
|||
-b::
|
||||
Create a new branch and start it at <branch>.
|
||||
|
||||
-l::
|
||||
Create the new branch's ref log. This activates recording of
|
||||
all changes to made the branch ref, enabling use of date
|
||||
based sha1 expressions such as "<branchname>@{yesterday}".
|
||||
|
||||
-m::
|
||||
If you have local modifications to one or more files that
|
||||
are different between the current branch and the branch to
|
||||
|
|
|
@ -5,10 +5,13 @@ SUBDIRECTORY_OK=Sometimes
|
|||
. git-sh-setup
|
||||
|
||||
old=$(git-rev-parse HEAD)
|
||||
old_name=HEAD
|
||||
new=
|
||||
new_name=
|
||||
force=
|
||||
branch=
|
||||
newbranch=
|
||||
newbranch_log=
|
||||
merge=
|
||||
while [ "$#" != "0" ]; do
|
||||
arg="$1"
|
||||
|
@ -24,6 +27,9 @@ while [ "$#" != "0" ]; do
|
|||
git-check-ref-format "heads/$newbranch" ||
|
||||
die "git checkout: we do not like '$newbranch' as a branch name."
|
||||
;;
|
||||
"-l")
|
||||
newbranch_log=1
|
||||
;;
|
||||
"-f")
|
||||
force=1
|
||||
;;
|
||||
|
@ -44,6 +50,7 @@ while [ "$#" != "0" ]; do
|
|||
exit 1
|
||||
fi
|
||||
new="$rev"
|
||||
new_name="$arg^0"
|
||||
if [ -f "$GIT_DIR/refs/heads/$arg" ]; then
|
||||
branch="$arg"
|
||||
fi
|
||||
|
@ -51,9 +58,11 @@ while [ "$#" != "0" ]; do
|
|||
then
|
||||
# checking out selected paths from a tree-ish.
|
||||
new="$rev"
|
||||
new_name="$arg^{tree}"
|
||||
branch=
|
||||
else
|
||||
new=
|
||||
new_name=
|
||||
branch=
|
||||
set x "$arg" "$@"
|
||||
shift
|
||||
|
@ -114,7 +123,7 @@ then
|
|||
cd "$cdup"
|
||||
fi
|
||||
|
||||
[ -z "$new" ] && new=$old
|
||||
[ -z "$new" ] && new=$old && new_name="$old_name"
|
||||
|
||||
# If we don't have an old branch that we're switching to,
|
||||
# and we don't have a new branch name for the target we
|
||||
|
@ -187,9 +196,11 @@ fi
|
|||
#
|
||||
if [ "$?" -eq 0 ]; then
|
||||
if [ "$newbranch" ]; then
|
||||
leading=`expr "refs/heads/$newbranch" : '\(.*\)/'` &&
|
||||
mkdir -p "$GIT_DIR/$leading" &&
|
||||
echo $new >"$GIT_DIR/refs/heads/$newbranch" || exit
|
||||
if [ "$newbranch_log" ]; then
|
||||
mkdir -p $(dirname "$GIT_DIR/logs/refs/heads/$branchname")
|
||||
touch "$GIT_DIR/logs/refs/heads/$branchname"
|
||||
fi
|
||||
git-update-ref -m "checkout: Created from $new_name" "refs/heads/$newbranch" $new || exit
|
||||
branch="$newbranch"
|
||||
fi
|
||||
[ "$branch" ] &&
|
||||
|
|
Loading…
Reference in a new issue