如何在根目录中列出git子树?

poc*_*sar 38 git git-subtree

例如,你可以做一个git remote --verbosegit将显示你项目中的所有遥控器,git branch将显示所有分支并发出当前分支的信号,但是如何列出所有子树,没有任何破坏性命令?git subtree将给出用法示例,但不会列出任何内容.子树只有add,pull,push,split,merge.

Sag*_*tus 47

没有任何明确的方法(至少目前为止),这里列出了唯一可用的命令(正如你自己记录的那样,但这里是未来寻求者的参考):https: //github.com/git/ GIT中/斑点/主/了contrib /子树/ GIT-s​​ubtree.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的家伙包括在下一个版本:)

  • +1.@procesar,FlipMcF:这对我在Windows上的"git bash"中起作用:"git version 1.8.5.2.msysgit.0".它应该工作的原因是"git subtree"命令将以"git-subtree-"开头的几行添加到提交消息中,其中一行看起来像"git-subtree-dir:you-prefix-folder".对于"教授" - 只需在运行"git subtree add ..."后立即查看"git log"的输出,您就会看到这些行. (3认同)

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)

  • @MattBracewell 看看“uniq”。您可以更新别名以通过管道传输到它,或“git ls-subtrees|uniq” (2认同)
  • 或者使用`sort -u`并按字母顺序排列目录作为奖励! (2认同)