diff options
Diffstat (limited to 'git-playtree-setup')
-rwxr-xr-x | git-playtree-setup | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/git-playtree-setup b/git-playtree-setup new file mode 100755 index 0000000..5d890a0 --- /dev/null +++ b/git-playtree-setup @@ -0,0 +1,48 @@ +#!/bin/bash +# +# usage: +# rm -rf .git/some/play/thing +# git-playtree-setup .git/some/play/thing +# or: +# mkdir .git/some/play/thing +# cd .git/some/play/thing +# git-playtree-setup . + +set -ex + +target=$1; shift + +case "$#.$target" in +0.[^-]*) ;; +*) echo >&2 'bad usage' ; exit 8 ;; +esac + +[ "x$target" = x. ] || mkdir $target +cd $target + +gcd=$(cd .. && git rev-parse --git-common-dir) +case "$gcd" in +/*) ;; +*) gcd="../$gcd" ;; +esac + +git init -q +git config gc.auto 0 + +unset_all () { git config --local --unset-all $key || [ $? = 5 ]; } + +for key in \ + user.email user.name user.useConfigOnly \ + core.sharedRepository \ + core.compression core.looseCompression \ + core.bigFileThreshold core.fsyncObjectFiles \ +; do + unset_all + ( + git --git-dir="$gcd" config -z --get-all $key || [ $? = 1 ] + ) | xargs -n1 -0r -- \ + git config --local --add $key +done + +rm -rf .git/objects +ln -s "$gcd/objects" .git/objects |