Например, вы можете сделать git remote --verbose
, и git покажет все пульты, которые у вас есть в вашем проекте, git branch
покажет все ветки и просигнализирует текущую ветку, но как вывести список всех поддеревьев без какой-либо деструктивной команды? git subtree
приведет примеры использования, но ничего не перечислит. поддерево имеет только add
,pull
,push
,split
,merge
.
Как я могу перечислить поддеревья git в корне?
Ответы (3)
Нет явного способа сделать это (по крайней мере, на данный момент), здесь перечислены только доступные команды (как вы сами заметили, но вот ссылка для будущих искателей): https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt
Я просмотрел код (по сути, весь этот механизм представляет собой большой файл сценария оболочки), все отслеживание выполняется с помощью сообщений фиксации, поэтому все функции используют механизм git log
с большим количеством grep
для поиска своих собственных данных.
Поскольку в поддереве должна быть папка с таким же именем в корневой папке репозитория, вы можете запустить это, чтобы получить нужную информацию (в оболочке 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 включить его в следующие версии :)
git subtree
является официальным. У него также есть некоторые недостатки... Вот почему git vendor
был изобретен manpages.debian.org/testing/git-man/git-subtree.1.en.html github.com/brettlangdon/git-vendor
- person Sandburg; 08.01.2020
git subtree
не является официальным, если он находится в каталоге contrib
исходного кода Git...
- person philb; 23.07.2021
Следуя ответу Саги Иллтуса, добавьте следующий псевдоним в свой ~/.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
uniq
. Вы можете обновить псевдоним, чтобы передать его, или git ls-subtrees|uniq
- person kenchilada; 16.02.2017
sort -u
и получите каталоги в алфавитном порядке в качестве бонуса!
- person Potherca; 18.10.2017
Проблема с просмотром журнала заключается в том, что он ничего не говорит вам о том, существует ли еще поддерево или нет. Я работал над этим, просто проверяя существование каталога:
[alias]
ls-subtrees = !"for i in $(git log | grep git-subtree-dir | sed -e 's/^.*: //g' | uniq); do test -d $i && echo $i; done"
git subtree
дал мнеgit: 'subtree' is not a git command.
. - person Jokester   schedule 20.05.2013