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 по-прежнему пытается сохранить изменения в локальном файле при извлечении, обновляя его только при обновлении пульта. Обзор можно найти здесь.