Ответ 1
Нет явного способа сделать это (по крайней мере, пока), здесь перечислены только доступные команды (как вы отметили сами, но здесь ссылка для будущих ищущих): https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt
Я прошел через код (в основном весь этот механизм представляет собой большой файл оболочки script), все отслеживание выполняется через сообщения фиксации, поэтому все функции используют механизм git log
с большим количеством grep
-ing чтобы найти его собственные данные.
Поскольку поддерево должно иметь папку с тем же именем в корневой папке репозитория, вы можете запустить ее, чтобы получить нужную информацию (в оболочке Bash):
git log | grep git-subtree-dir | tr -d ' ' | cut -d ":" -f2 | sort | uniq
Теперь это не проверяет наличие папки или нет (вы можете удалить ее, и механизм поддерева не будет знать), поэтому здесь, как вы можете перечислить только существующие поддеревья, это будет работать в любой папке в репозиторий:
git log | grep git-subtree-dir | tr -d ' ' | cut -d ":" -f2 | sort | uniq | xargs -I {} bash -c 'if [ -d $(git rev-parse --show-toplevel)/{} ] ; then echo {}; fi'
Если вы действительно это сделаете, предложите Git ребятам включить в следующие версии:)