git log --graph输出中出现意外的下划线

时间:2013-03-06 14:31:00

标签: git git-log

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

该下划线是什么意思?

我正在使用的具体命令是:

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

输出如下:

git log --graph output

我已经尝试在gitk中查看图中的这个区域,但似乎没有任何与众不同的东西。

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

I see:        I'd expect for
              normal branching:

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

3 个答案:

答案 0 :(得分:3)

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

/ /
| /

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

/ /
| _

代替。

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

答案 1 :(得分:3)

来自Git来源的ack "'_'"graph_output_collapsing_line函数内的graph.c, line 1120打印下划线似乎:

/*
 * 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], '/');

    }
}

但是在考虑了一段时间后,无论如何都没有多大意义。下划线是一个符号,用于从当前分支向左穿过不相关的分支,到达左边某个分支点。这可以在屏幕截图中的其他位置看到,但这个特殊的下划线看起来真的很丢失。

答案 2 :(得分:0)

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

|

git_weirdness