Подтвердить что ты не робот

Как я могу перечислить подделки git в корне?

Например, вы можете сделать git remote --verbose и git, показывая все удаленные объекты в вашем проекте, git branch покажет все ветки и сообщит текущую ветку, но как отобразить все поддеревья без любая деструктивная команда? git subtree предоставит примеры использования, но ничего не перечислит. поддерево имеют только add, pull, push, split, merge.

4b9b3361

Ответ 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"