git:分支间依赖关系图/列表



我有时有一些相关的特征分支,有些是在其他方面建造的,例如

                o feature-B
               /
              /
          o--o feature-A
         /
        /
master o
        
         o feature-C

我想显示一个图表,显示哪些分支取决于哪个分支,但是很难获得git log --graph来产生我想要的东西。

以下未能显示分支之间的关系。

$ git log --graph --format='%h%d' ^master feature-{A,B,C}
* 801ecee208 (HEAD -> feature-B)
* e568acd804 (feature-A)
* f49ecc9e28
* a42d73d4bc (feature-C)

^master更改为^master~改善了事物,但迫使我包括一个我不在乎的提交(origin/some-earlier-branch)。

$ git log --graph --format='%h%d' ^master~ feature-{A,B,C}
* 801ecee208 (HEAD -> feature-B)
* e568acd804 (feature-A)
* f49ecc9e28
| * a42d73d4bc (feature-C)
|/
* 67cf54dd0e (master)
* 40b72ecc6a (origin/some-earlier-branch)

那非常接近我想要的东西,尽管省略最后一行会很不错。

我真正要获得的是一种清单清单,哪些分支取决于其他分支。像

feature-A -> master
feature-B -> feature-A
feature-C -> master

因此我可以生成依赖项的GraphViz图。

这些实际上不是依赖项(尽管这可能对您的目的无关紧要)。

例如:

,请考虑此简短变体
    o   <-- foo
   /
  o
 /
o       <-- master

现在,我们使用git branch bar foo~1添加分支标签bar

    o   <-- foo
   /
  o     <-- bar
 /
o       <-- master

foo"取决于" bar),当 bar可以随时眨眼和外出时,这似乎很奇怪。取而代之的是,您需要的东西会在您构建图表时会告知您的思维 - 将其视为" foo 共享可与bar的可及以达到的命令"。也就是说,您想要的是列出提交列表及其父ID,然后将各种ID相关联。如果某些ID是从 A分支提示a,b和c的 comport的,则可以与这三个分支名称共享其原因。

现在您只需要生成两个列表:

  • 每个分支提示的哈希ID和
  • 每个分支提示的每个提交的哈希ID ,不包括可排除的任何名称(例如master
  • 的所有提示。

例如,这应该这样做(我尚未对其进行测试):

for name in $names; do
    echo $name $(git rev-parse $name)
done
echo --
git rev-list --parents $names --not $exclude

第一组线路,直至--,为分支提示提供了名称对ID映射(当然,假设$names中的所有名称都是有效的)。在--到EOF之后的第二组线路为您提供了犯罪ID,然后为所有父母的IDS提供了该提交的ID(一个用于常规提交,两个或更多用于Merge Consits,而没有父母来root wissits)。--not $exclude确保您无法从$exclude中的名称列表中获得任何提交。

请注意,多个分支名称可能指向一个分支提示,如果所有分支提示都在"或后面",则ID集的第二个列表可以为空。

<。

最新更新