I was working with a fresh clone of a repository where I'd forgotten that one of the directories was setup as a submodule, so I hadn't initialized it.
I tried to add a symlink to a location outside the repository and this failed with an assertion (exact text in comment below). When looking into that I realized that the directory was meant to be a submodule and decided to try to change that. So I tried to remove the submodule, and got an error (misleadingly) saying that couldn't be done because it uses a .git directory.
I first noticed this with git 2.9.3 from Debian unstable, but I also see it building from v2.10.1-502-g6598894 fetched from master recently.
The following script replicates both of these issues. These could both be classified as "don't do that", although at lease the assertion is quite ugly.
--- >8 ---- #!/bin/sh -e
directory=$(mktemp -d) echo "Using directory '$directory'" cd $directory git init --quiet orig ( cd orig # Using a random, small repository for the submodule. git submodule --quiet add https://github.com/diepm/vim-rest-console.git sub git commit -m init >/dev/null ) git clone --quiet orig dup cd dup
( cd sub ln -s /tmp/dont_care # Next command aborts with # git: pathspec.c:317: prefix_pathspec: Assertion `item->nowildcard_len <= item->len && item->prefix <= item->len' failed.` git add . || : expected to fail )
rm -f .git/index.lock # Next command fails with error wrongly saying that the submodule uses a .git # directory. I believe that the real problem is that the uninitialized # submodule has content. git rm sub