There is no such thing as a linear history

Читаю очередной гитосрач. Люди одновременно требуют линейной (и "истинной", да, куда же без этого) истории исходников и тут же настаивают на своём праве мержиться с апстримом не закоммичивая файлы. Шизофрения в активной стадии.

На самом деле вот это вот правда, которая давно вертелась на языке, но повода сказать не было: никакой линейной истории не существует. Её и не было никогда — были "полочки" (shelves), были какие-то идиотские "системы для ревью", куда закачивали файлы, были вот эти фичи в системах, позволявшие обновляться и переключать ветки, по возможности не трогая незакоммиченые изменения. Теперь ничего этого не нужно, совсем. Просто коммитишь часто и рано, просто собираешь потом из этого осмысленные изменения в нужном порядке, а остальное выкидываешь или сберегаешь на потом.

PS: отдельные манагеры даже, бывало, говорили: что-то в мастер у нас много напушили, а на носу бета, давайте сделаем очередной релизбилд из предыдущего, только вот эти изменения туда перенесём. И ничо, оказалось что так тоже можно, хотя я офигел поначалу.
люди — долбоёбы в большинстве своём. видимо, никогда не работали с проектами, где «вот это комитим, а это не комитим, а это я вообще пока в стороне подержу». потому что иначе сломаются нахуй вечерние билды и пиздюлей вломит сначала начальство, а потом ещё коллеги добавят. но по правилам двоемыслия, видимо, это надо считать «линейной историей».

а вообще — люди просто не умеют работать с инструментом, вот и пугаются. «ножом ведь порезаться можно — давайте ножи запретим!» «а помидоры-то резать чем?» «а чем хочешь! эй, эй! ты куда бензопилу поволок?!»
сберегать, кстати, тоже жутко удобно стало: бранчи-то дешевле блох с бродячей собаки. ура-ура, не надо больше делать идиотских каталогов, в которых лежат промежуточные варианты, потом вспоминать, где какой, потом пытаться их как-то влить куда надо… сделал ветку, покоммитил туда нужные куски с комментариями — и пусть себе лежат. а потом ещё ветку, заволок их туда, причесал — и в главную. и всё это не превращается в катастрофу локальных, но неприятных масштабов, если вдруг надо срочно починить баг в совсем маинлайне, от которого ты сто лет назад в сторону уехал.
- (Anonymous)
1. ну можно же ткнуться в бранч в gitk и посмотреть что там: и коммент, и какое изменение
* можно точно так же ткнуться в parent. И там сразу и список бранчей и соседний тег, и чего душе угодно.
В конце концов, если ты не знаешь зачем тебе нужна ветка - вероятно, она тебе не нужна.

2. можно использовать refs/remotes/username/ неймспейс на сервере. Никому ничего мешаться не будет. В системах типа guthub или gitorious и вовсе у каждого свой форк.

3. А что CI? Ну, во-первых, да, итоговый мастер должен быть - надо же откуда-то делать официальные dailybuilds для других команд. Во-вторых, правильный CI можно натравить на любой url, в том числе и на персональную ветку разработчика, и на merge request. Я даже, бывало, натравливал его прямо на рабочий репозиторий на своей машине, и через сколько-то минут получал ссылку на apt-репозиторий с готовыми пакетиками (а ещё подождав немного - и на файл прошивки для девайса).
1. а что, тэги запретили? ну и да: в превом же коммите радостно пишем «войну и мир» в комментарии. потому что до первого коммита бранч всё равно не отличается от родителя.

2. и в чём проблема? gitolite, например — и вперёд гадить на сервер. дальше того, куда не разрешили — не нагадишь.

3. нет, давно не слышал. по крайней мере в обычном виде «сливаем вместе всё говно и молемся». но тебе вон Макс хорошо написал. и да: если мастер — линейная история, то я — гений вокала (правда, после жестокой обработки аудиософтом). в 99% случаев в мастрер мержат причёсаный разработчиком бранч, где «линейностью» уже даже не воняет. а руководитель проекта может и над Святым надругаться, над самим мастером.
меня интересует где все эти хипстеры работают =)