X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=git-checkout.sh;h=3bbd1117739b02572aece86030bb9f02f3110d34;hb=2ba53073f7c14cf45f220e59e4b54a4b657f7216;hp=4c08f36b591508b5d940384db603e2f4483116d6;hpb=72e5890b68e7199d92620d3bba91fa36dd259404;p=git.git diff --git a/git-checkout.sh b/git-checkout.sh index 4c08f36b..3bbd1117 100755 --- a/git-checkout.sh +++ b/git-checkout.sh @@ -1,9 +1,8 @@ #!/bin/sh -. git-sh-setup || die "Not a git archive" -usage () { - die "usage: git checkout [-f] [-b ] [] [...]" -} +USAGE='[-f] [-b ] [] [...]' +SUBDIRECTORY_OK=Sometimes +. git-sh-setup old=$(git-rev-parse HEAD) new= @@ -81,8 +80,7 @@ then # from a specific tree-ish; note that this is for # rescuing paths and is never meant to remove what # is not in the named tree-ish. - git-ls-tree -r "$new" "$@" | - sed -ne 's/^\([0-7]*\) blob \(.*\)$/\1 \2/p' | + git-ls-tree --full-name -r "$new" "$@" | git-update-index --index-info || exit $? fi git-checkout-index -f -u -- "$@" @@ -98,6 +96,14 @@ else fi fi +# We are switching branches and checking out trees, so +# we *NEED* to be at the toplevel. +cdup=$(git-rev-parse --show-cdup) +if test ! -z "$cdup" +then + cd "$cdup" +fi + [ -z "$new" ] && new=$old # If we don't have an old branch that we're switching to, @@ -119,7 +125,7 @@ else fi # -# Switch the HEAD pointer to the new branch if it we +# Switch the HEAD pointer to the new branch if we # checked out a branch head, and remove any potential # old MERGE_HEAD's (subsequent commits will clearly not # be based on them, since we re-set the index)