Что означают цвета линий в git log -graph?

Мне интересно, что означают цвета линий в git log --graph?

Да, я спрашиваю о строках | / \, которые соединяют коммиты * с левого края вывода консоли.

part of git log --graph output

Вопрос № 1
У этих цветов есть какой-то скрытый смысл?
Или они выбраны псевдослучайно?

Вопрос № 2
Иногда перекрывающиеся (но отключенные) линии имеют одинаковый цвет.
Например, посмотрите на фиолетовые линии на скриншоте выше:

  • первая строка от a55 до e1c
  • вторая строка от 3c1 до 043

Можно ли попросить git выбирать цвета разумно, чтобы избежать наложения одинаковых (не имеющих общего коммита) линий одного цвета?
Я хочу, чтобы график был более легко читаемым.

Ответ 1

Цвета предназначены только для того, чтобы помочь вам просматривать строки в отличие от других строк. Чтобы ответить на вопрос № 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,

Визуально, многие из этих цветов "выглядят одинаково" (или достаточно похожи, чтобы быть неотличимыми). В частности, я считаю, что "смелые" выглядят слишком похожими на "обычные", если не имеется достаточно нескольких букв, напечатанных "жирным шрифтом", т.е. Шрифт Mac Terminal "смелый" просто не так уж смелый чем его стандартный вес. Это приводит к тому, что многие строки чересчур визуально похожи в графике для git log --graph --decorate --oneline --all, например, в репозитории Git для Git.

Изменить: теперь это исправление (или возможность работы), начиная с Git 2.12, используя новую запись конфигурации log.graphColors. Это список имен цветов или номеров цветов, разделенных запятыми (см. запись документации git config для "цвета" в разделе "Значения" ).

Во-вторых, "номер столбца" в настоящее время фактически не является номером столбца строки. Вместо этого это номер столбца фиксации. Цвет линии поднимается от этой фиксации до фиксации над ней. Все пурпурные линии в вашем снимке изображения переходят к фиксации, напечатанным в столбце № 0: оба a55fd8d и 3c1494a находятся в столбце 0. (Они оба объединяются, поэтому они объединяют входящие строки.)

Можно ли спросить Git правильно выбирать цвета, чтобы избежать изолированного (не имеющего общей фиксации) одинаковых цветных линий для перекрытия?

Вы всегда можете клонировать репозиторий Git для Git и писать новый код. Отмечу, что существующий graph.c составляет почти 1400 строк.

Ответ 2

В этой фиксации 73c727d69f47572bf7f21fa31831f9a3fdad944c ( "log -graph: настроить линии графика с помощью config log.graphColors", 2017-01 -19), можно выбрать цвета с помощью log.graphColors config.

Даже со стандартным терминалом, если цвет фона не черный или белый, то линия графика может соответствовать вашему фону и стать скрытый. Вы можете исключить цвет фона (или просто цвета вы ненавидите) с этим.

Я использую Git Bash, и я исключаю цвет GIT_COLOR_BLUE по вышеуказанной причине.

Я могу использовать любые шестнадцатеричные цветовые коды (по крайней мере, на Git Bash). Ниже настройки конфигурации используются только три цвета.

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

Ответ 3

Обратите внимание, что эти цвета не будут точными в случае слияния осьминога, что означает слияние с более чем двумя родителями.

"git log --graph" для слияния осьминога иногда окрашивается неправильно, что продемонстрировано и задокументировано в Git 2.24 (Q4 2019), но еще не исправлено.

См. коммит 11c21f2, коммит 25eb905, коммит 63be8c8, коммит a7a5590, коммит 94ba151 (04 октября 2019 г.) Дентон Лю (Denton-L).
(Merged by Junio C Hamano -- [TG42] -- in commit 5b900fb, 15 Oct 2019)

t4214: продемонстрировать сбой окраски осьминога

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).

Если запустить

git log --graph 74c7cfa875

видно, что слияние осьминога окрашено неправильно.
В частности, горизонтальные черточки отключены одним цветом. Каждая горизонтальная черта должна быть цветом линии справа внизу. Вместо этого они в настоящее время имеют цвет линии до их дна.