Стратегии предотвращения конфликтов слияния, например, в git

Файлы, которые регулярно добавляются или дополняются, имеют тенденцию к конфликтам слияния.

Например, у нас есть ChangeLog.txt файл на верхнем уровне нашего хранилища. Всякий раз, когда кто-то вносит существенное изменение, предваряется удобное для клиента описание изменения. ChangeLog.txt, Это вызывает частые конфликты слияния, так как разные разработчики объединяют отдельные изменения или когда отдельные разработчики перебазируют и изменяют последовательность коммитов и тем самым ChangeLog.txt изменить заказ.

(У нас также есть UpgradeDatabaseSchema.pm Библиотека Perl, которая также имеет N записей pr. версия, которая также имеет конфликты слияния, но позволяет придерживаться ChangeLog.txt).

Как можно избежать подобных конфликтов слияния?

Единственное, что я придумал, это структура каталогов, где вместо фиксации ChangeLog.txtмы фиксируем записи в changeLog каталог в отдельных файлах:

changeLog/
    v1.1/
        fooFeature.txt
        bug-4524-fix.txt
        refactoredWhatever.txt
    v1.2/
        bug-4522-fix.txt
        barFeature.txt
        removedFoobar.txt

А потом пусть ChangeLog.txt быть построенным, например, путем конкатенации этих файлов каким-либо образом (а не отслеживания / фиксации ChangeLog.txt в мерзавце). Это немного громоздко...

Мы также кратко рассмотрели только использование git log вместо ChangeLog.txt, но не будет, потому что аудитория другая: журнал git для разработчиков, и ChangeLog.txt для клиентов. Кроме того, нельзя легко изменить описание коммита в git log без изменения истории git и нарушения ветвления для всех.

Так:

  • Жить с конфликтами слияния
  • Используйте структуру каталогов вместо одного плоского файла
  • Используйте git log

Есть ли другие способы сделать это, что мы упустили из виду?

1 ответ

Решение

Вы также можете использовать стратегию объединения "объединение" для отдельных файлов, как описано здесь: http://krlmlr.github.io/using-gitattributes-to-avoid-merge-conflicts/

Просто добавьте строку в.gitattributes

ChangeLog.txt merge=union
Другие вопросы по тегам