Jus*_*tin 4 git tree user-interface git-log
我正在使用 Sourcetree,但我在其他 Git GUI 工具中看到了同样的问题,所以我不确定是否有任何工具可以满足我的需要。
这个问题的主要原因是,有时我需要查看特定的发行版本分支,并查看所有其他分支以及相对于感兴趣的分支的所有提交。
目前它可能会令人困惑,因为即使我检查分支,它也不会在树可视化中显示为直线,这使得跟踪该分支何时以及为何分裂或合并变得复杂。如果我可以将特定分支视为一条垂直直线,并且所有其他分支都围绕它排列,那就容易多了。
例如,我有分支 A,然后在其上创建一个分支 B,然后将某些内容提交到 B 中,并将其他内容提交到 A 中。当我查看日志时,我希望能够指定分支 A 是我感兴趣的分支,因此分支 A(而不是分支 B)应显示为直线。但目前我不知道该怎么做 - 看起来,Git(或 Sourcetree)决定哪个分支将显示为一条直线(最有可能的是,它是最新提交的分支?)以及将显示哪些分支从当前选择的“主分支”中分离出来。
因为 Git 将提交存储在有向循环图或 DAG 中,所以这里实际上是一个图(DAG) 可视化问题。有各种有用的外部程序,例如Graphviz,但所有这些都是外部工具,不是内置于 Git 中的,因此您必须在这里自己做一些工作。另请参阅漂亮的 git 分支图。
这里还有一个次要问题。当您认为提交是在某个分支“上”时,您可能会认为如果您在分支B上进行了提交,那么它们从那时起就“属于”分支B 。这在 Mercurial 中是正确的,但在 Git 中却是令人痛苦的错误。任何给定的提交都位于该提交可到达的所有分支上,其中可到达性是一个技术术语(有关可到达性问题的详细描述,请参阅Think Like (a) Git )。这对您的问题最终意味着没有可靠的方法来识别“主线”。如果你所有的程序员在进行合并时都很小心,你可以在合并提交时使用 Git 的第一个父属性来识别这条主线,但是如果有人使用过,他们将创建一些所谓的Foxtrot Merges,这会扰乱主线 -线的概念。git pull
每个 Git 图形绘制工具(例如 Git-GUI 或 gitk 或 SourceTree)都有自己的方法来枚举图形中的提交,因此每个工具都有自己的绘制 DAG 的方式。对于git log --graph,这是相当粗略的,dvaergiller 的评论很有趣,但请注意,在使用 时--graph,将排序顺序从原来的“最新的优先”git log 更改为“拓扑”。大多数图形绘制程序必须进行某种拓扑排序,以尽量减少线交叉。
最后,您可能会发现,git log --graph --branches --tags --decorate --simplify-by-decoration基本上不需要付出额外的努力,就能获得 90% 以上的想要的东西。“通过装饰简化”模式告诉git log丢弃任何未标记(没有分支或标签名称)并且不需要显示图形结构的提交。因此,您将获得分叉点和合并点,因为您需要它们来构建结构,再加上分支和标签的名称,向您展示一幅非常好的“大图”图,即使线条不太直。
| 归档时间: |
|
| 查看次数: |
603 次 |
| 最近记录: |