# Lock on the parent pid because the hooks are launched as children of vcsh.
echo $PPID > "$LOCKDIR/pid"
-# git read-tree manual page says this is the proper way to fully repopulate
-# the working tree.
-git config core.sparseCheckout true
-rm -f "$GIT_DIR/info/sparse-checkout"
-echo "/*" > "$GIT_DIR/info/sparse-checkout"
-git read-tree -mu HEAD
-git config core.sparseCheckout false
+# Verify if the current branch is valid before updating the working tree.
+# This avoids errors with empty repositories which would only confuse the
+# user.
+if git rev-parse --verify HEAD >/dev/null 2>&1;
+then
+ # git read-tree manual page says this is the proper way to fully repopulate
+ # the working tree.
+ git config core.sparseCheckout true
+ rm -f "$GIT_DIR/info/sparse-checkout"
+ echo "/*" > "$GIT_DIR/info/sparse-checkout"
+ git read-tree -mu HEAD
+ git config core.sparseCheckout false
+fi
: "${XDG_CONFIG_HOME:="$HOME/.config"}"
. "$XDG_CONFIG_HOME/vcsh/hooks-available/sparse-checkout.sh"
-git read-tree -mu HEAD
+
+# Verify if the current branch is valid before updating the working tree.
+# This avoids errors with empty repositories which would only confuse the
+# user.
+if git rev-parse --verify HEAD >/dev/null 2>&1;
+then
+ git read-tree -mu HEAD
+fi
# Unlock the working tree.
rm -rf "$LOCKDIR"