SVN: trunk закрыт для записи

Wicked

Новичок
SVN: trunk закрыт для записи

По какой-то не совем понятной мне причине разработчик со стороны заказчика принял такое решение:
он закрыл простым смертным (всем, кроме себя) доступ в trunk, и сказал, чтобы вся разработка велась в бранчах. Бранчи создаются по одному под каждую задачу. После того, как задача считается выполненной, соответствующий бранч сливается в транк этим разработчиком, а бранч удаляется.

Аргументировал он это тем, что, мол, в транке всегда должна быть работающая версия проекта.

Я же считаю такую организацию работы неправильной, но 100%-но обосновать не могу. Мои аргументы против такого подхода:
1) замедление работы, т.к. на любую, даже самую мелкую задачу, которая в принципе ничего нарушить не может (например, добавление нового файла с картинкой), нужно сначала создать бранч, а потом его смержить обратно.
2) бранчей набралось уже около 20 штук, и возникает путаница, какой из них в каком состоянии, какие из них пора удалять, и т.д. и т.п.
3) по хорошему _все_ бранчи нужно мержить из транка каждый раз, когда транк обновляется. А это уже некая квадратичная зависимость трудозатрат.

На мой взгляд бранчи нужны _только_ тогда, когда речь идет о какой-то очень большой задаче, которая может занять продолжительное время, и при этом обещает нарушить работоспособность проекта в целом, если ее закоммитить незавершенной.

Как вы считаете, кто прав? Если прав я, то какие еще аргументы можно задействовать, чтобы заставить того разработчика отменить эту схему? Ну там кроме как взять его семью в заложники :)
 

StUV

Rotaredom
imho, разработчик со стороны заказчика почти прав
коммитить напрямую в trunk нельзя
Бранчи создаются по одному под каждую задачу
это конечно перегиб =)))
бранчи должны создаваться под релиз ("большая задача") - в чем ты прав
и разработка должна вестись в этом бранче
если нужно "добавить картинку" - то добавить ее к конкретному релизу - к тому, на котором крутится продакшн (т.е. нельзя удалять бранч сразу после выпуска этого релиза)
мержить "картинку" после тестирования из бранча в trunk и от trunk делать релизный тег.

а закрывается бранч после перевода продакшна на релиз, полученный из бранча разработки новой "большой задачи".

если параллельно ведется разработка нескольких "малых задач" в рамках одной большой - разработка должна вестись в одном бранче с частыми up+resolve/ci - это намного эффективнее, чем (как правило) менее регулярные merge+resolve
 

Crazy

Developer
Wicked, это вполне допустимая схема Я пробовал так работать. Это не так страшно. Но и не безоблачно.

Проблемы следующие:

1. Принципиально снижается скорость правки мелких дефектов. Когда стоит задача "за 1.5 часа впятером выгрести 50 мелких дефектов" -- работа в бранчах стопорит дело намертво.

2. ВСЕ РАВНО возникают ситуации, когда в какой-то момент в транке лежит кривая версия. Это лечится ТОЛЬКО введением отдельной роли Configuration Engeneer'а, который мерджит бранчи. Это круто и концептуально, но в результате можно забыть про возможность собрать билд быстрее, чем за 1-2 часа.

Де-факто хорошо зарекомендовала себя такая практика:

1. Введение сервиса, который каждые N минут вынимает транк из репозитория и прогоняет тесты. В результате мы имеем уверенность, кто неконсистентность в транке будет замечена в течении 30-60 минут. Проверено, что это достаточная гарантия безопасности. Для Java мы гоняем CruiseControl.

2. НЕ создаем бранчи заранее. НО вводим правила:
1) В колнце дня исходники должны быть закоммичены и стерты с компа. Утром -- вынимаем обратно.
2) Если к концу дня изменения невозможно закоммитить, поскольку они не проходят тесты или просто неготовы -- из текущего состояния локальной копии делается бранч.
3) Создавая бранч -- пишем себе письмо с названием бранча и причиной создания. Как альтернатива -- пост в блог проекта, заметка в вики и т.п. Но я тупо использую почту.
 

Crazy

Developer
StUV, в сущности -- да. Но когда человек делает commit без update после двух часов правок -- это не особо разрушительно.
Главное -- чтобы не держали по две недели незакоммиченную версию вместо создания бранча.

Был у нас один герой -- три недели пилил глюкало, потом сделал частичный update и закоммитил все в транк. Я потом разгребал часа 3, чтобы оно хотя бы компилироваться начало и только на следующий день удалось поднять тесты.
 

nail

Новичок
Wicked: создай бранч и считай его транком, ну и мержи его в настоящий транк иногда :)
 

baev

‹°°¬•
Команда форума
Как вы считаете, кто прав?
— а не пофиг?

Вы выполняете свою работу, получаете за неё деньги.
А в чего там представители заказчика «играются» — это ж, вроде, не Ваша проблема?..
 

Crazy

Developer
baev, за играющихмя представителей заказчика не скажу, а вот играющиеся представители инвестора на лично моей памяти угробили 3 проекта. Поскольку гениальных идей у них -- хоть задницей ешь, а ответственность за сроки/качество потом ляжет на исполнителя. И "мы сорвали сроки, поскольку нас тормозила навязанная схема работы с репозиторием" почему-то рассматривают исключительно как попытку лепить отмазки.
 

baev

‹°°¬•
Команда форума
Crazy, и к чему Вы это всё написали?
Вы считаете, что ваши ошибки обязательно должны кем-то воспроизводиться?
 

Crazy

Developer
Автор оригинала: baev
Crazy, и к чему Вы это всё написали?
К тому, что неправильно слепо идти на поводу у людей, не несущих ответственности за свои решения.

Вы считаете, что ваши ошибки обязательно должны кем-то воспроизводиться?
Не припомню, чтобы я что-то писал о своих ошибках, а равно о их воспроизведении. Нельзя ли пояснить, чем вызван этот парадоксальный вопрос?
 

WP

^_^
+1 к человеку который сам все коммитит.
Чтоб "всегда была рабочая версия" надо разложить по релизам. Т.е. одна версия dev, с которой работают и которую насилуют, а другая stable, и dev не обязана в каждый момент быть рабочей.
Неопытные и глупые люди должны делать бранчи, а опытные и умные должны иметь доступ напрямую.

А заказчики и что они хотят навязать это отдельная тема, я в таких случаях говорю что кто несет ответственность тот и должен выбирать средства разработки, и если то что ему предложили, не подходит, он либо уходит либо использует средства удобные ему.
 

algo

To the stars!
Угу, есть проекты которые так работают. Схема работы типа "stable trunk" и модификации.

Из опенсурса так работают Twisted, Divmod, вроде еще Django. Извиняйте, что это все Python, но так уж вышло.

Схема Сrazy интересна, а как же жить если unit тестов нету. =)
 

baev

‹°°¬•
Команда форума
Нельзя ли пояснить, чем вызван этот парадоксальный вопрос?
— ну, это же Ваши слова: «представители инвестора на лично моей памяти угробили 3 проекта».

Я посчитал, что Вы (Ваша организация) явно ошиблись. Причём ошибка была повторена. То есть — первый раз (и второй) ничему вас не научил.

Да, и, по поводу:
я что-то писал о своих ошибках
— заметьте, я писал о «ваших ошибках» именно с маленькой буквы. Подразумевая не лично Ваши ошибки, а ошибки конторы.
 

Crazy

Developer
Автор оригинала: baev
Я посчитал, что Вы (Ваша организация) явно ошиблись. Причём ошибка была повторена. То есть — первый раз (и второй) ничему вас не научил.
Все еще не понимаю, о каких ошибках идет речь.
 

baev

‹°°¬•
Команда форума
Да где уж мне — у меня, скорее, «проектики».
Но собственные ошибки я стараюсь не повторять — поэтому число «угробленных» равно единице.
 
Сверху