I use a bare Git repository approach with Git worktrees extensively. Every subdirectory in my projects represents a different git branch as a worktree.
When you see a project like /home/code/projects/my-app/:
my-app/= project container (NOT a working tree)my-app/.bare/= actual Git repository databasemy-app/.git= pointer file directing Git commands to.bare/