From 399144f21c1b3bcd4c9dadd4f534118475de840d Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sat, 23 Jul 2005 18:52:22 -0700 Subject: [PATCH] Add a "git rename" to help with - surprise surprise - renames It's stupid. We'd want to rename directories too, but this doesn't do that yet - easy enough to do per se, we just need to carefully list all the pathnames that got moved (and remember to ignore the files that weren't tracked but are in the subdirectory that got moved). Doing the directory case will require a bit more scripting.. Something like oldfiles=($(git-ls-files | grep '^$src')) newfiles=($(git-ls-files | sed ':^$src: s:^$src:$dst:')) mv $src $dst && git-update-cache --add --remove -- "${oldfiles[@]}" "${newfiles[@]}" might do it, except it needs to be done right, and carefully. Methinks perl is probably better at this. Hint hint.. --- Makefile | 2 +- git-rename-script | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100755 git-rename-script diff --git a/Makefile b/Makefile index f87225d599..e92518f857 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ SCRIPTS=git git-apply-patch-script git-merge-one-file-script git-prune-script \ gitk git-cherry git-rebase-script git-relink-script git-repack-script \ git-format-patch-script git-sh-setup-script git-push-script \ git-branch-script git-parse-remote git-verify-tag-script \ - git-ls-remote-script git-clone-dumb-http + git-ls-remote-script git-clone-dumb-http git-rename-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-rename-script b/git-rename-script new file mode 100755 index 0000000000..3952382dbc --- /dev/null +++ b/git-rename-script @@ -0,0 +1,7 @@ +#!/bin/sh + +. git-sh-setup-script || die "Not a git archive" + +[ -f "$1" ] || [ -h "$1" ] || die "git rename: bad source" +[ -e "$2" ] && die "git rename: destination already exists" +mv -- "$1" "$2" && git-update-cache --add --remove -- "$1" "$2"