Git: избегать часто меняющихся строк

В моем проекте есть XML-файл: mainWindow.ui. Это файл Qt Designer для графического интерфейса. Для каждого отдельного значка и другого ресурса есть строка вроде:

<iconset resource="../build/resources.qrc">

Проблема в том, что resources.qrc - это сконфигурированный файл, местоположение которого зависит от каталога сборки конкретного пользователя (который, как правило, различается для всех в зависимости от их предпочтений, например,

<iconset resource="../../build/resources.qrc">

Это приводит к ожесточенной борьбе между разработчиками, которые редактируют mainWindow.ui, потому что каждый раз они изменяют около 50 строк, и это означает длительное и утомительное ручное слияние для этого файла каждый раз, когда происходит запрос на слияние.

Не делая mainWindow.ui настроенным файлом, могу ли я сказать git не разрешать изменения этих строк, или я могу сказать Qt Designer исправить это местоположение? Как я могу избежать этой ситуации?

1 ответ

Решение

Вы могли бы создать .gitattributes файл, который может указывать, что все конфликты слияния разрешаются с помощью our настройки:

 mainWindow.ui merge=ours

Это остановит mainWindow.ui от перезаписи слияниями. Вместо того, чтобы конфликтовать, это автоматически разрешит слияние, приняв текущее состояние файла. Это может быть хорошо, если разработчики имеют свои собственные ветки с настройками. Если они работают напрямую с master, это будет менее полезно, так как они будут затем использовать свои собственные настройки.

В качестве альтернативы, и, возможно, лучше в вашем случае, каждый разработчик может заставить git игнорировать изменения в mainWindow.ui:

git update-index --skip-worktree mainWindow.ui

Это довольно запутанно, но заставляет Git игнорировать изменения в файле при нажатии, но Git по-прежнему пытается сохранить изменения в локальном файле при извлечении, обновляя его только при обновлении пульта. Обзор можно найти здесь.

Другие вопросы по тегам