Вы можете написать свой собственный драйвер слияния .
Когда Git попадает в дело, которое может привести к конфликтам слияния, запускается драйвер слияния. Встроенный драйвер объединения по умолчанию Git находит конфликты, объявляет их как конфликты и оставляет маркеры конфликтов в вашей копии файла в вашем рабочем дереве. Это то, что вы решали вручную.
Если вы используете файл gitattributes , чтобы пометить исходный файл как имеющий драйвер слияния , тем не менее, Git использует ваш определенный драйвер слияния вместо его встроенного. Git уже содержит в индексе все три копии файла:
- базовая копия слияния, являющаяся частью общего общего коммита;
--ours
копия из ветки HEAD
commit / current; и - копия
--theirs
из коммита, который вы объединяете.
Git извлечет все три копии во временные файлы и вызовет ваш драйвер слияния с именами эти временные файлы. Ваш драйвер слияния должен:
- найти разницу от базового файла до
ours
и theirs
копий, а - объединить эти различия, записав результат в
ours
copy.
Если ваш драйвер обнаруживает конфликты, ваш драйвер должен сообщить о ненулевом статусе выхода. Если нет, ваш драйвер должен сообщить об успехе, выйдя с нулевым статусом.
То есть вам нужно продублировать работу, которую сделал бы стандартный драйвер низкого уровня. Ключевое отличие состоит в том, что если есть строка, которая изменяется в обоих, и это одна , которую вы можете разрешить с помощью компьютерной программы, то стандартный низкоуровневый драйвер может 't , вы можете go опередить и решить его.
Если вы не хотите переписывать все стандартные низкоуровневые драйверы снова, вы можете вызвать Git low -уровень слияния драйвера первым. Это доступно как отдельная команда, git merge-file
. Он будет делать то же самое, что и встроенный низкоуровневый драйвер Git, и будет возвращать тот же вид состояния выхода. Затем вы можете проверить этот статус, и если он говорит о наличии конфликтов слияния, ваша программа может попытаться разрешить их. Если ваша программа выполнена успешно, ваша программа может сообщить об отсутствии статуса завершения.
(Написание хороших драйверов слияния нетривиально, но для вашего конкретного случая это может быть не так уж плохо, если вы используете git merge-file
для большинства работы.)