Browse Source

Add "git checkout" that does what the name suggests

It is careful by default and refuses to overwrite old info, but if you
want to force everything to be re-read, use the "-f" flag.

Some day I'll make it take individual filenames too. Right now
it's all-or-nothing.
maint
Linus Torvalds 20 years ago
parent
commit
303e5f4c32
  1. 2
      Makefile
  2. 30
      git-checkout-script

2
Makefile

@ -24,7 +24,7 @@ SCRIPTS=git git-apply-patch-script git-merge-one-file-script git-prune-script \
git-pull-script git-tag-script git-resolve-script git-whatchanged \ git-pull-script git-tag-script git-resolve-script git-whatchanged \
git-deltafy-script git-fetch-script git-status-script git-commit-script \ git-deltafy-script git-fetch-script git-status-script git-commit-script \
git-log-script git-shortlog git-cvsimport-script git-diff-script \ git-log-script git-shortlog git-cvsimport-script git-diff-script \
git-reset-script git-add-script git-reset-script git-add-script git-checkout-script


PROG= git-update-cache git-diff-files git-init-db git-write-tree \ PROG= git-update-cache git-diff-files git-init-db git-write-tree \
git-read-tree git-commit-tree git-cat-file git-fsck-cache \ git-read-tree git-commit-tree git-cat-file git-fsck-cache \

30
git-checkout-script

@ -0,0 +1,30 @@
#!/bin/sh
: ${GIT_DIR=.git}
old=$(git-rev-parse HEAD)
new=$(git-rev-parse --revs-only "$@")
new=${new:-$old}
args=($(git-rev-parse --no-revs "$@"))

i=0
force=0
while [ $i -lt ${#args} ]; do
case "${args[$i]}" in
"-f")
force=1;;
"")
;;
*)
echo "unknown flag ${args[$i]}"
exit 1;;
esac
i=$(($i+1))
done

if $force
then
git-read-tree --reset $new &&
git-checkout-cache -q -f -u -a &&
echo $new > "$GIT_DIR/HEAD"
else
git-read-tree -m -u $old $new && echo $new > "$GIT_DIR/HEAD"
fi
Loading…
Cancel
Save