¿Cómo puedo encontrar todos los repositorys de git, incluyendo los vacíos?

Usualmente cuando busco repositorys git busco un directory .git , pero eso no siempre funciona. Los treees de trabajo de submodules tienen un file .git , los submodules no siempre están desprotegidos, y los repositorys de submodules (y los repositorys libres) pueden estar en cualquier lugar.

Quiero encontrar cada repository clonado de say github, pero encontrar cada repository es lo suficientemente difícil. ¿Hay un command o un oneliner para hacer esto?

El repository mínimo de git contiene dos files, HEAD y config , y dos directorys, objects y refs .

Entonces puede indicar find para encontrar directorys que cumplan esos criterios. HEAD es un nombre bastante inusual, busquemos eso:

 # find all repositories find -name HEAD -execdir \ [ -d refs -a -d objects -a -f config ] \; \ -printf %h\\n # or if your `find` doesn't have `-printf`, just `-print` 

va a hacer Esto encuentra el repository, no su tree de trabajo; para encontrar treees de trabajo, encontrar .git sigue siendo la mejor manera

 find -name .git 

o si el .git final es molesto

 find -name .git -printf %h\\n