Я не думаю, что вы сможете найти решение, чтобы делать то, что вы хотите. Вы можете использовать атрибут merge
, чтобы управлять тем, как файлы, которые различаются, объединяются, но в вашем случае у вас есть два идентичных файла.
Когда Git выполняет объединение двух разных коммитов, он сравнивает каждый файл в дерево в обеих головках, которое оно объединяет (в данном случае PR1 и F2) с учетом переименований. Если файлы идентичны в обоих случаях (то есть, у BLOB-объектов одинаковые значения ha sh), он объединит их, просто взяв в качестве результата версию, которая есть в обеих заголовках, без учета чего-либо еще.
Это тот случай, который у вас есть: обе стороны имеют один и тот же файл в одинаковом состоянии, поэтому Git не учитывает необходимость какого-либо слияния, и, следовательно, не вызывает код слияния или не учитывает какие-либо атрибуты, связанные с слияния. Не имеет значения, что ваши деревья иначе различаются: различные файлы будут объединены, но идентичные файлы не будут вызывать механизм слияния.
Если у вас есть два файла, которые отличаются, вы можете использовать version.json -merge
, чтобы заставить их конфликтовать в любое время, когда они изменились, но это не повлияет на идентичные файлы.
Если семантике c, которую вы собираетесь использовать, является повышение версии при каждом коммите или слиянии, тогда лучше вычислить версию, используя Git и какой-то сценарий, чем каждый раз менять файл в хранилище.