Suggest unsetting core.bare when using new-workdir on a bare repository
authorShawn O. Pearce <spearce@spearce.org>
Wed, 22 Aug 2007 05:33:49 +0000 (01:33 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 22 Aug 2007 22:18:13 +0000 (15:18 -0700)
If core.bare is set to true in the config file of a repository that
the user is trying to create a working directory from we should
abort and suggest to the user that they remove the option first.

If we leave the core.bare=true setting in the config file then
working tree operations will get confused when they attempt to
execute in the new workdir, as it shares its config file with the
bare repository.  The working tree operations will assume that the
workdir is bare and abort, which is not what the user wants.

If we changed core.bare to be false then working tree operations
will function in the workdir but other operations may fail in the
bare repository, as it claims to not be bare.

If we remove core.bare from the config then Git can fallback on
the legacy guessing behavior.  This allows operations in the bare
repository to work as though it were bare, while operations in the
workdirs to act as though they are not bare.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/workdir/git-new-workdir

index 119cff98597f6539e88327bcafaa0bd5a88c020e..c6e154a84fb5bdd4ed456ac3fdf94c54466fc5f0 100755 (executable)
@@ -33,6 +33,14 @@ case "$git_dir" in
        ;;
 esac
 
+# don't link to a configured bare repository
+isbare=$(git --git-dir="$git_dir" config --bool --get core.bare)
+if test ztrue = z$isbare
+then
+       die "\"$git_dir\" has core.bare set to true," \
+               " remove from \"$git_dir/config\" to use $0"
+fi
+
 # don't link to a workdir
 if test -L "$git_dir/config"
 then