DAG против дерева с помощью Git?

Я часто читал, что Git использует структуру данных направленный ациклический график (DAG), с каждой фиксацией как node, и такие вещи, как ветки и метки, как указатели на узлы.

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

Итак, какая разница между DAG и деревом, особенно в отношении Git?

Ответы

Ответ 1

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

DAG, как дерево, может быть выложена так, чтобы все отношения между родителями и дочерними элементами были односторонними. Разница между ними заключается в том, что узлы в DAG могут иметь несколько родителей. Наиболее распространенный случай этого в Git - это когда вы выполняете слияние. Согласование слияния будет иметь все коммиты, которые были объединены как родители. Дерево не позволяет узлам иметь несколько родителей.

Graph with merging (Источник изображения)

Обратите внимание, что слияние с C6 имеет два родителя: C4 и C5.