Стратегии предотвращения конфликтов слияния, например, в 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