metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-12-05 12:26 pm

Гит, zeromq и двойная бухгалтерия

Недавно [livejournal.com profile] vit_r писал про то, что гит не пригоден для промышленной разработки, т.к. позволяет вести "двойную бухгалтерию".
Насколько я понял, речь шла про то, что код на рабочем месте разработчика, код в мастере и код в релизе могут быть совершенно разными, причем инструментом это прямо рекомендуется. Ну, по крайней мере, именно это меня привлекает в гите - мне постоянно нужны экспериментальные ветки в стиле "сохранился, заглянул за угол, увидел что там босс-монстр, загрузился и пошел другим путем".

Внезапно, в процессе изучения ZeroMQ я наткнулся на прямую иллюстрацию такой двойной бухгалтерии.
Вот например, стабильная версия 4.0.5, исходники под винду: http://download.zeromq.org/zeromq-4.0.5.zip
Так вот, последние 230 коммитов в changelog этой версии напрочь отсутствуют в https://github.com/zeromq/libzmq
Более того, в этой репе существует сугубо две ветки и ни одного тэга.

Ну, то что мастер не собирается в 2010 студии из-за зависимости от крипто-либы sodium, а rc4.1.0 не собирается из-за отсутствующих файлов msbuild, это тащемта уже мелочи. Но по крайней мере, rc4.1.0 есть в гите.

[identity profile] besm6.livejournal.com 2014-12-05 10:04 am (UTC)(link)
Инструментом там рекомендуется, чтобы код в релизе и код в репозитории того, кто этот релиз выпускает, был одинаковым. У разработчика он может быть каким угодно, пока оный разработчик не надел шляпу релиз-менеджера. А существование (центрального) мастера git вообще не поощряет.

Что же до описанной двойной бухгалтерии, то VCS тут вообще ни при чем. Я неоднократно наблюдал подобное с абсолютно любыми VCS и даже вообще без VCS. И считаю, что это, конечно, бардак, но куда хуже, если в мастер коммитят код в состоянии "у меня все работает", от чего ВНЕЗАПНО все ломается у всех остальных разработчиков проекта.

А еще интереснее бывает, если из такого мастера в этот момент выпускают релиз... Ибо дисциплина "релиз выпускаем из тега, а тег ставим на релизную ветку после того, как в ней прошли все тесты, включая ручные" совершенно перпендикулярна модели работы VCS и наличию VCS как таковой.