Избегайте Git делать слияния с определенным типом файла - PullRequest
0 голосов
/ 21 ноября 2018

Я работаю над довольно большим проектом, созданным на основе Git-репозиториев, в котором есть несколько файлов разных типов.Среди них мы используем инструмент моделирования QM, который использует файлы .qm, которые на самом деле являются файлами XML с определенной структурой.

Структура .qm и значение его содержимого делает нежелательным использование объединенияинструмент для объединения любых изменений.

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

Плюсы, если то же самое верно, если я выполню ребазирование вместо слияния.

1 Ответ

0 голосов
/ 22 ноября 2018

Хорошо, отвечаю себе, когда я нашел решение.

Я нашел этот ответ и немного его изменил.Я добавил новую стратегию слияния, которая в основном берет файл таким, какой он есть во входящей ветви, и использует его без изменений, а затем помечает файл как конфликтующий.

Итак, я создал этот скрипт:

#!/bin/bash
# ${1} is the base common file
# ${2} is the file as modified by the base branch, and where the results must be
# ${3} is the file as modified by the incoming branch
# ${4} is the path of the file being merged

# ${4%.qm*} is the path without extension
# ${4##*.} is the extension of the path
# makes a backup of the original file to ease edits comparison
cat "${2}" > "${4%.qm*}.bk.${4##*.}"

cat "${3}" > "${2}"
exit 1

, который использует входящий файл как результат как есть, и возвращает 1, чтобы пометить его как конфликт.

Затем я добавил в .gitattributes параметр использовать эту стратегию для моего файла .qm, чтобыкогда я объединяю две ветви, я беру входящую версию как есть и использую графический инструмент для изменения и интеграции моих изменений.

Я оставлю этот вопрос как нерешенный, чтобы посмотреть, есть ли у кого-нибудь другое решение, котороепозволит мне использовать как rebase, так и слияние.

РЕДАКТИРОВАТЬ: я обновил скрипт, я добавил несколько строк, чтобы взять версию локальной ветви и сделать ее резервную копию, чтобы она была доступна для использованияв инструменте сравнения, чтобы легче идентифицировать мои изменения.

...