Например, вы можете сделать git remote --verbose
и git, показывая все удаленные объекты в вашем проекте, git branch
покажет все ветки и сообщит текущую ветку, но как отобразить все поддеревья без любая деструктивная команда? git subtree
предоставит примеры использования, но ничего не перечислит. поддерево имеют только add
, pull
, push
, split
, merge
.
Как я могу перечислить подделки git в корне?
Ответ 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 ребятам включить в следующие версии:)
Ответ 2
В ответ на ответ Sagi Illtus добавьте следующий псевдоним к вашему ~/.gitconfig
[alias]
ls-subtrees = !"git log | grep git-subtree-dir | awk '{ print $2 }'"
Затем вы можете git ls-subtrees
из корня вашего репозитория показать все пути поддерева:
$> cd /path/to/repository
$> git ls-subtrees
some/subtree/dir
Ответ 3
Проблема с очисткой журнала заключается в том, что это ничего не говорит о том, существует ли поддерево или нет. Я обошел это, просто протестировав существование каталога:
[alias]
ls-subtrees = !"for i in $(git log | grep git-subtree-dir | sed -e 's/^.*: //g' | uniq); do test -d $i && echo $i; done"