例如,你可以做一个git remote --verbosegit将显示你项目中的所有遥控器,git branch将显示所有分支并发出当前分支的信号,但是如何列出所有子树,没有任何破坏性命令?git subtree将给出用法示例,但不会列出任何内容.子树只有add,pull,push,split,merge.
Sag*_*tus 47
没有任何明确的方法(至少目前为止),这里列出了唯一可用的命令(正如你自己记录的那样,但这里是未来寻求者的参考):https: //github.com/git/ GIT中/斑点/主/了contrib /子树/ GIT-subtree.txt
我经历了代码(基本上所有这个机制都是一个大的shell脚本文件),所有的跟踪都是通过提交消息完成的,所以所有的函数都使用git log大量的grep-ing 机制来定位它自己的数据.
由于子树必须在存储库的根文件夹中具有相同名称的文件夹,因此您可以运行此命令以获取所需的信息(在Bash shell中):
git log | grep git-subtree-dir | tr -d ' ' | cut -d ":" -f2 | sort | uniq
Run Code Online (Sandbox Code Playgroud)
现在,这不检查文件夹是否存在(您可以删除它并且子树机制不知道),所以这里是如何只列出现有的子树,这将在存储库中的任何文件夹中工作:
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'
Run Code Online (Sandbox Code Playgroud)
如果你真的很喜欢它,建议Git的家伙包括在下一个版本:)
mir*_*ixx 26
跟进Sagi Illtus的回答,将以下别名添加到您的~/.gitconfig
[alias]
ls-subtrees = !"git log | grep git-subtree-dir | awk '{ print $2 }'"
Run Code Online (Sandbox Code Playgroud)
然后,您可以git ls-subtrees从存储库的根目录显示所有子树路径:
$> cd /path/to/repository
$> git ls-subtrees
some/subtree/dir
Run Code Online (Sandbox Code Playgroud)