Add a simple script to create a working directory that uses symlinks to point at an exisiting repository. This allows having different branches in different working directories but all from the same repository. A poor-man's .gitlink if you will. Signed-off-by: Julian Phillips <julian@xxxxxxxxxxxxxxxxx> --- I wrote this for my own use based on a post from Junio earlier this month (http://article.gmane.org/gmane.comp.version-control.git/41513/). Sent just in case it might be useful? contrib/workdir/git-new-workdir | 53 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-) create mode 100755 contrib/workdir/git-new-workdir diff --git a/contrib/workdir/git-new-workdir b/contrib/workdir/git-new-workdir new file mode 100755 index 0000000..4f4f926 --- /dev/null +++ b/contrib/workdir/git-new-workdir @@ -0,0 +1,53 @@ +#!/bin/bash + +function usage () { + echo "usage:" $1; + exit 127; +} + +function die () { + echo $1; + exit 128; +} + +test $# -eq 3 || usage "$0 <original> <new_workdir> <branch>"; + +orig_git=$1; +new_workdir=$2; +branch=$3; + +# want to make sure that what is pointed to has a .git directory ... +test -d ${orig_git}/.git || die "${original_git} is not a git repository!"; + +# don't link to a workdir, link to the original repo the workdir is linked to +if test -L ${orig_git}/.git/config +then + orig_git=$(dirname $(dirname $(readlink -f gm/.git/config))); +fi + +# make sure the the links use full paths +orig_git=$(cd ${orig_git}; pwd); + +# create the workdir +mkdir -p ${new_workdir}/.git || die "unable to create new dir ${new_workdir}!"; + +# create the links to the original repo +for x in config refs logs/refs objects info hooks packed-refs remotes rr-cache +do + case ${x} in + */*) + mkdir -p $(dirname ${new_workdir}/.git/${x}); + ;; + esac + ln -s ${orig_git}/.git/${x} ${new_workdir}/.git/${x}; +done + +# now setup the workdir +cd ${new_workdir}; +# create a fake HEAD, to stop checkout complaining +echo "ref: refs/heads/master" > .git/HEAD; +# now checkout the branch that was asked for +git checkout ${branch}; + +# vim: tabstop=8 +# vim: noexpandtab -- 1.5.0.5 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html