Самый долгий merge в моей жизни
Заметка будет интересна только программистам.
Фотография ниже лежит у меня на ноуте с августа 2013 года. Очень не люблю такое — всё нужное я привык закачивать в интернет, всё ненужное — удалять. Не мог определиться куда деть это фото, решил положить в блог, снабдив небольшим рассказом.

Наверное все программисты знают что такое «мерж» (merge) — слияние двух веток и согласование изменений, сделанных в файлах в рамках этих веток. Если системе контроля версий удаётся справить самостоятельно, то «мержи» происходят автоматически, это, в моей практике, наиболее частая ситуация. В противном случае возникает «конфликт» — «мерж» останавливается до разрешения конфликта человеком. Только человек может решить как будет выглядеть сводный код, учитывающий изменения, сделанные в двух слияемых ветках.
Я однажды попал в неприятнейшую ситуацию, когда две команды в нашей компании, в силу многих причин, независимо работали над одним и тем же продуктом около года.
Одна из команд работала над функциями, которые нужны в продукте заказчику, вторая, которой руководил я, — делала несколько довольно серьёзных изменений с заделом на будущее, в частности — внедряла шаблонизацию.
Через год попытались слить две ветки воедино и получили конфликты почти во всех основных файлах проекта. Ничего совсем уж неожиданного, конечно, особенно с учётом того, что часть кода была переписана с ПХП на «Твиг», но никогда в ещё в жизни я не видел столько конфликтов. Затронуты были, если мне не изменяет память, несколько сотен файлов.
С одной стороны, других вариантов, кроме как собрать это всё воедино, не рассматривалось, с другой стороны, объём предстоящей работы удручал.
В общем, погрустил я, погрустил, повесил табличку «Не беспокоить» и заперся в кабинете на неделю. Каждый файл с конфликтом распечатывал дважды — из каждой ветки. Потом раскладывал распечатанное на полу, выделял маркером одинаковые места, рисовал стрелками что куда переместилось, шёл к ноутбуку и так или иначе разрешал конфликт.
На фотографии — процесс разрешения конфликтов одного из файлов. Через неделю я был полностью разбит монотонностью работы, но ветки слил.
У нас не настолько большой был мёрж, но нескольких сразу модулей и эта работа так вымотала разработчика, что он был готов уволиться, если ему немедленно не дадут нормальное задание. Так что отдаю должное вашему терпению.
Эпично.
А потом ещё несколько недель чинили последствия мержа? :)
У меня подобных историй было две.
Первая — пришлось сделать частичный бэкпорт («реинтегрировать» ветку как оно называется в терминах SVN), половину изменений при этом откатить, и подменить транк пропатченной более ранней версией. Это, блин, в проекте из ~50 модулей, над которым одновременно работало 6 команд в трёх временных зонах. Почти год потом был этаким «хранителем репозитория» и занимался надзором за всеми последующими мержами, пока снова не нагнали прежнее состояние :\ Чуть не погиб каждый день читать всю историю коммитов в тонне кода.
Вторая — локализация проекта на полтора миллиона строк кода, выпекаемая аж 9 месяцев отдельной командой в отдельном бранче. Под конец каждый день приходилось мержить из апстрима, и разгребать конфликты в .po для 11 языков. Конечный мерж в транк так или иначе затронул ~200 тыщ строк, но ничего не уронил.
В общем, ну его в жопу такие задачи, больше за подобное в жизни не возьмусь.
Сколько-то чинили, но каких-то заметных последствий именно от мержа я не припомню, другие баги — были, конечно.
Даа, сочувствую :(
Есть какая-то горькая ирония в том, что в компании с подзаголовком «Система электронного документооборота» конфликт решается на бумаге.
Это не подзаголовок, компания так и называется — «Системы документооборота». Только разрешение конфликтов кода и документооборот — это бесконечно далёкие вещи. В чём ирония?
Горизонт чутка завален.
Пришлось поставить расширение для поворота картинок.
Странно, что браузеры из коробки такое до сих пор не предлагают.
Да что там особо рассматривать-то? Это уж так, КДПВ.
1) это решение не подходило в данном случае из-за своеобразных проблем, о которых я не хочу распространяться
2) увы, вы слишком оптимистичны