Você usou -print antes de -type d , por isso find imprime todas as coisas que não satisfizeram a primeira expressão.
Você deseja trocá-los:
find . -path '*/.git' -prune -o -type d -print
ou usando somente predicado, para que você possa omitir -print :
find . ! \( -path '*/.git' -o -path '*/.git/*' \) -type d
Observe também que você só precisa usar um asterisco */.git , o asterisco duplo ** não tem um significado especial para find padrão de correspondência. E você pode torná-lo mais simples, mais portátil e um pouco mais rápido usando -name em vez de -path :
find . -name .git -prune -o -type d -print