9

在我的 Linux 内核副本上运行git log --graph时,我在图中看到一个看起来不应该存在的下划线。

这个下划线是什么意思?

因此,我正在使用的特定命令是:

git log --graph --decorate --pretty=oneline --abbrev-commit --all --date-order

输出如下所示:

git log --图形输出

我试过在 gitk 的图表中查看这个区域,但那里似乎没有任何不寻常的地方。

我不认为这只是显示一个分支点,因为我希望它呈现在右侧,而不是左侧(左侧应与上图匹配):

I see:        I'd expect for
              normal branching:

 \ \ \         \ \ \
 / / /         / / /
| _ /         | / /
|  /          |/ /
| |           | |
| |           | |
4

3 回答 3

4

ack "'_'"Git 源代码看来,下划线打印在函数内部的第graph.c1120 行graph_output_collapsing_line

/*
 * Output out a line based on the new mapping info
 */
for (i = 0; i < graph->mapping_size; i++) {
    int target = graph->new_mapping[i];
    if (target < 0)
        strbuf_addch(sb, ' ');
    else if (target * 2 == i)
        strbuf_write_column(sb, &graph->new_columns[target], '|');
    else if (target == horizontal_edge_target &&
         i != horizontal_edge - 1) {
            /*
             * Set the mappings for all but the
             * first segment to -1 so that they
             * won't continue into the next line.
             */
            if (i != (target * 2)+3)
                graph->new_mapping[i] = -1;
            used_horizontal = 1;
        strbuf_write_column(sb, &graph->new_columns[target], '_');
    } else {
        if (used_horizontal && i < horizontal_edge)
            graph->new_mapping[i] = -1;
        strbuf_write_column(sb, &graph->new_columns[target], '/');

    }
}

但是想了一会儿,还是觉得没什么意思。下划线是从当前分支向左穿过不相关分支的符号,以到达更左侧的分支点。这可以在您的屏幕截图的其他地方看到,但这个特殊的下划线看起来确实丢失了。

于 2013-03-06T15:40:27.417 回答
3

对我来说,这似乎是一个渲染人工制品。很可能,控制台输出有一些逻辑来防止这样的事情

/ /
| /

不会发生,因为此代码段不会准确显示发生分支操作的位置。因此,设计师可能选择了

/ /
| _

反而。

但我在这里可能错了,这似乎是应该在代码中检查出来的东西。

于 2013-03-06T15:03:18.420 回答
1

非常老的问题,但是今天我在为 git graph 输出编写解析器时遇到了这个问题。起初我还认为它直接连接到左侧的分支_,但在尝试了一些更大的存储库后,我发现它的意思是:连接到左侧的一个分支。|为什么它被渲染成这样对我来说完全是个谜。请参阅下面的示例。

git log --graph --date-order --all --pretty=format:"%h %p %s"

git_weirdness

于 2017-11-30T18:46:10.750 回答