git log --graph中的线条颜色代表什么意思?

35

我很好奇在 git log --graph 中,线的颜色代表什么意思?

是的,我指的是连接控制台输出左边缘处的提交 * 的线 | / \

部分 git log --graph 输出

问题 #1
这些颜色有隐藏的含义吗?
还是它们是伪随机选择的?

问题 #2
有时候,重叠但不相连的线条具有相同的颜色。
例如,看一下上面截图中的紫色线:

  • a55e1c 的第一条线
  • 3c1043 的第二条线

是否可以要求 git 明智地选择颜色,以避免孤立(没有共同提交)的相同颜色线条重叠?
我希望能更容易地阅读这个图形。


我的猜测是,分支中的提交与另一个分支中的提交相同,这是由于合并所致,而不同的颜色表示不同的提交。 - Matt Schuchard
1
颜色有什么含义吗?没有。它们只是一种机制,使得在不同的提交序列之间进行视觉区分更加容易。 - twalberg
3个回答

15

颜色只是为了帮助您将线条与其他线条区分开来。回答问题#1,它们不是伪随机分配的,而是按顺序分配的,每次git log --graph选择一个新的“列编号”。不幸的是,我知道其中有两个问题。这两个问题都与您的问题#2有关。

这里是按名称排序的完整颜色列表

    GIT_COLOR_RED,
    GIT_COLOR_GREEN,
    GIT_COLOR_YELLOW,
    GIT_COLOR_BLUE,
    GIT_COLOR_MAGENTA,
    GIT_COLOR_CYAN,
    GIT_COLOR_BOLD_RED,
    GIT_COLOR_BOLD_GREEN,
    GIT_COLOR_BOLD_YELLOW,
    GIT_COLOR_BOLD_BLUE,
    GIT_COLOR_BOLD_MAGENTA,
    GIT_COLOR_BOLD_CYAN,

视觉上,这些颜色很多都“看起来一样”(或者足够相似,难以区分)。特别是,在较少的字母以“bold”打印的情况下,“bold”的颜色与标准字体的颜色非常相似,即我的Mac终端字体的“bold”并不比它的标准字重更加粗体。例如,在Git存储库的git log --graph --decorate --oneline --all运行中,使得许多行在图形中过于相似。

编辑:现在可以修复(或解决)这个问题了,从Git 2.12开始,可以使用新的log.graphColors配置项。这是一个逗号分隔的颜色名称或颜色序号列表(请参见值部分中对“颜色”文档条目的git config文档输入)。

其次,“列号”实际上并不是该行的列号,而是提交的列号。该行的颜色从该提交向上延伸到其上方的提交。您的图像快照中的所有品红色线路都进入列#0中打印的提交:a55fd8d3c1494a都在“列0”中。 (它们都是合并提交,因此它们合并了传入的线路。)

是否可以要求git明智地选择颜色,以避免孤立(没有共同提交)的相同颜色线路重叠?

您可以始终克隆Git存储库并编写新代码。我想指出现有的graph.c文件已经接近1400行了。


谢谢。据我所见,Git当前实现的着色算法对于多个并行提交线(“每个开发人员一个分支”)已经足够好了,但对于“许多开发人员在单个分支上”的Git仓库使用方式则不太适用(这是许多组织的常见情况,据我所知)。 - Egor Skriptunoff
1
@torek,如果你愿意的话,你可以编辑你的答案,提到使用log.graphColors配置(如果你想的话,你可以使用我的下面的答案)来选择颜色。虽然OP没有要求这个设置,但对大多数人来说,这个设置可以解决可读性问题。 - hIpPy
@hIpPy:有趣;这在 Git 2.12 是新的。 - torek

6
在这个提交73c727d69f47572bf7f21fa31831f9a3fdad944c("log --graph: customize the graph lines with config log.graphColors", 2017-01-19)中,可以使用log.graphColors config选择颜色。

即使使用标准终端,如果您的背景颜色既不是黑色也不是白色,那么图形线条可能与您的背景相匹配并变得隐藏。您可以使用此功能排除您的背景颜色(或仅仅是您不喜欢的颜色)。

我使用Git Bash,并且出于上述原因排除了GIT_COLOR_BLUE颜色。

我可以使用任何十六进制颜色代码(至少在Git Bash中)。下面的配置设置仅使用三种颜色。

[log]
    graphColors = "#ffffff",red,green

0
请注意,如果出现章鱼合并(即具有超过2个父级的合并提交),则这些颜色将不准确。
对于章鱼合并,“git log --graph”有时会着色不正确,这在Git 2.24(2019年第4季度)中已经得到证明和记录,但尚未修复。

请查看提交 11c21f2, 提交 25eb905, 提交 63be8c8, 提交 a7a5590, 提交 94ba151 (2019年10月04日) 由Denton Liu (Denton-L)提交。
(由Junio C Hamano -- gitster --合并于提交 5b900fb, 2019年10月15日)

t4214: demonstrate octopus graph coloring failure

Signed-off-by: Denton Liu

The graph coloring logic for octopus merges currently has a bug. This can be seen git.git with 74c7cfa875 (Merge of http://members.cox.net/junkio/git-jc.git, 2005-05-05), whose second child is 211232bae6 (Octopus merge of the following five patches., 2005-05-05).

If one runs

git log --graph 74c7cfa875

one can see that the octopus merge is colored incorrectly.
In particular, the horizontal dashes are off by one color. Each horizontal dash should be the color of the line to their bottom-right. Instead, they are currently the color of the line to their bottom.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接