Мне не ясно, какова цель такого дерева чтения, но причина, по которой у вас нет конфликта, состоит в том, что этот вид дерева чтения действительно объединяет три дерева без слияния ( так что все находится на нулевой стадии), и невозможно иметь файл и каталог с одинаковыми именами, поэтому запись каталога переопределяет запись файла, удаляя b
из окончательного индекса.
Базовый код (в unpack-trees.c
) также используется для git diff-index
- см. этот комментарий в unpack_callback
- и здесь он хочет знать, может ли он пропустить поддерево. Имеет ли это какое-то влияние на то, как случай без слияния предназначен для поведения , я не совсем уверен, но учтите, что когда мы дойдем до этого фрагмента кода, у нас есть маска и маска, которая делает не совпадает (так как у одного дерева есть каталог, а у двух других есть файлы). Функция unpack_nondirectories
просто устанавливает stage = 0
, если o->merge
имеет значение false, что имеет место в данном случае. (Кажется, что он может вести себя иначе, если дерево last имеет каталог в этой позиции, так как здесь мы установим бит конфликта, тогда continue
.)