You should use git-new-workdir, it is available with most git distributions - see link.
The git-new-workdir script will create a fully functional symlinked repo, where you can choose to work on a single branch. Repeat N times for N branches.
It is really advisable to use the script manually at first, but if you want to get going for an existing repo, you can automate along the lines of:
SYM_TREE_DIR=/tmp/my_git_branches
REPO=/path/to/my/repo/to/clone
mkdir -p $SYM_TREE_DIR
cd $REPO
git for-each-ref --format="%(refname)" refs/heads | \
while read entry
do
# extract just the leaf branch name for simplicity
# (remove the first 11 characters that correspond to "refs/heads/")
BRANCH=${entry:11}
# attempt to clone the repo into the SYM_TREE_DIR
if ../git-new-workdir . $SYM_TREE_DIR/$BRANCH $BRANCH &> /dev/null
then
echo Successfully created linked repo $BRANCH at $SYM_TREE_DIR/$BRANCH
else
echo Failed to create linked repo $BRANCH at $SYM_TREE_DIR/$BRANCH
fi
done