Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-21 20:47:37 +0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-21 20:47:37 +0400
commit303e5f4c325d008c68e5e70e901ab68b289ade2e (patch)
treea0f2f1d6795edac667b70bccc420f2a8b9c9c93a
parent83ba99bc8c2cdbaa9a0b4ec286e72c3ecb31bf8a (diff)
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.
-rw-r--r--Makefile2
-rwxr-xr-xgit-checkout-script30
2 files changed, 31 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index bf63984bb9..3372269f5a 100644
--- a/Makefile
+++ b/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-deltafy-script git-fetch-script git-status-script git-commit-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 \
git-read-tree git-commit-tree git-cat-file git-fsck-cache \
diff --git a/git-checkout-script b/git-checkout-script
new file mode 100755
index 0000000000..e8e777f1f2
--- /dev/null
+++ b/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