summaryrefslogtreecommitdiff
path: root/git-playtree-setup
diff options
context:
space:
mode:
Diffstat (limited to 'git-playtree-setup')
-rwxr-xr-xgit-playtree-setup48
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