<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2592326469964039544</id><updated>2012-01-26T13:17:26.025-08:00</updated><category term='control'/><category term='help desk'/><category term='engineer'/><category term='tools'/><category term='rhonda'/><category term='books'/><category term='life and death'/><category term='linkedin'/><category term='документация'/><category term='upgrade'/><category term='perforce'/><category term='sourcedepot'/><category term='интеграция'/><category term='Plastic'/><category term='п4'/><category term='ртутный'/><category term='git'/><category term='configuration'/><category term='контроль'/><category term='сравнение'/><category term='недостатки'/><category term='video'/><category term='bad CM'/><category term='багтрекинг'/><category term='пафос'/><category term='bitkeeper'/><category term='etraxis'/><category term='patch'/><category term='управление'/><category term='SCM'/><category term='IEEE'/><category term='distributed'/><category term='обзор'/><category term='visualization'/><category term='variant management'/><category term='caissonian'/><category term='best practices'/><category term='пример внедрения'/><category term='шаблоны'/><category term='итраксис'/><category term='ветвление'/><category term='услуга'/><category term='берчук'/><category term='конфигурирование на базе правил'/><category term='build'/><category term='коротко'/><category term='google code'/><category term='гитхаб'/><category term='brown'/><category term='saas'/><category term='eric sink'/><category term='mario'/><category term='redmine'/><category term='ubuntu'/><category term='Hg'/><category term='гит'/><category term='subversion'/><category term='google'/><category term='rsdn'/><category term='отслеживание ошибок'/><category term='морейра'/><category term='CM Journal'/><category term='ozon.ru'/><category term='amazom.com'/><category term='github'/><category term='bullshit'/><category term='torvalds'/><category term='win2000'/><category term='adapting'/><category term='successful'/><category term='source control'/><category term='выпуск'/><category term='изменения'/><category term='promotion'/><category term='baseline'/><category term='качество'/><category term='revision'/><category term='яндекс'/><category term='deployment'/><category term='внедрение'/><category term='version'/><category term='rule-based configuration'/><category term='Bzr'/><category term='aiello'/><category term='новичков'/><category term='студенты'/><category term='plastic scm'/><category term='clodo'/><category term='распределенный'/><category term='berczuk'/><category term='убунту'/><category term='change control'/><category term='config spec'/><category term='clearcase'/><category term='книги'/><category term='task'/><category term='project management'/><category term='cvcs'/><category term='premium'/><category term='фаулер'/><category term='management'/><category term='git extentions'/><category term='linus'/><category term='continuous integration'/><category term='rational'/><category term='rup'/><category term='CM'/><category term='айелло'/><category term='юмор'/><category term='метрики'/><category term='VersionControlTools'/><category term='product'/><category term='Конфигурационное управление'/><category term='CM Crossroads'/><category term='высокоуровневая сборка'/><category term='SCMP'/><category term='i fix'/><category term='veracity'/><category term='рабочий продукт'/><category term='перевод'/><category term='review'/><category term='SWEBOK'/><category term='конфигурация'/><category term='sachs'/><category term='задача'/><category term='unified'/><category term='CVS'/><category term='manage'/><category term='cloud'/><category term='goo.gl'/><category term='орлик'/><category term='moreira'/><category term='cyclic dependencies'/><category term='выполнено'/><category term='transcript'/><category term='Neuma CM'/><category term='системы контроля версий'/><category term='VCS'/><category term='Atlassian'/><category term='practical methods'/><category term='слияние'/><category term='публикация'/><category term='software'/><category term='релиз'/><category term='жажда знаний'/><category term='план'/><category term='components'/><category term='version control'/><category term='release'/><category term='VisualSVN'/><category term='fawler'/><category term='selectors'/><category term='wiki'/><category term='eventum'/><category term='применение'/><category term='эпплтон'/><category term='workflow'/><category term='isolation'/><category term='оригинал'/><category term='CI'/><category term='web development'/><category term='amazon.com'/><category term='история'/><category term='ibm'/><category term='agile'/><category term='metrics'/><category term='работа'/><category term='p4'/><category term='марио'/><category term='пример использования'/><category term='windows'/><category term='перфорс'/><category term='bugtracking'/><category term='openquality'/><category term='отслеживание'/><category term='wave'/><category term='3.x'/><category term='code review'/><category term='merge'/><category term='linux'/><category term='заповеди'/><category term='branching'/><category term='JIRA'/><category term='Codice'/><category term='appleton'/><category term='интервью'/><category term='process'/><category term='patterns'/><category term='TFS'/><category term='dvcs'/><category term='stream'/><category term='закрыть'/><category term='MS'/><category term='Bazaar'/><category term='policies'/><category term='yandex'/><category term='configuration management'/><category term='team foundation server'/><category term='сервис'/><category term='контроль версий'/><category term='cmcrossroads'/><category term='профессия'/><category term='history'/><category term='features'/><category term='microsoft'/><category term='рэдмайн'/><category term='стабилизация'/><category term='antipatterns'/><category term='версия'/><category term='issue tracking'/><category term='model'/><category term='SVN'/><category term='mercurial'/><category term='RSDN Magazine'/><category term='политики'/><category term='parallel development'/><title type='text'>Записки отставного сиэмщика</title><subtitle type='html'>Заметки о Software Configuration Management.
Управление конфигурацией программного обеспечения.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>64</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-3329579818663241068</id><published>2011-12-01T21:14:00.001-08:00</published><updated>2011-12-01T21:49:04.952-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='интервью'/><category scheme='http://www.blogger.com/atom/ns#' term='VisualSVN'/><category scheme='http://www.blogger.com/atom/ns#' term='VCS'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='cvcs'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Интервью с техдиром VisualSVN и немного мыслей</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Набрёл&amp;nbsp;в блоге Якова Сироткина&amp;nbsp;на &lt;a href="http://yakov-sirotkin.livejournal.com/182448.html"&gt;интервью с Иваном Жаковым&lt;/a&gt;, техническим директором &lt;a href="http://www.visualsvn.com/"&gt;VisualSVN&lt;/a&gt;, и по совместительству - контрибьютором Subversion.&lt;br /&gt;&lt;br /&gt;Интересный пример того, как можно сделать прибыльный проект, используя в качестве базы open source продукты. Сабвершн открыт и бесплатен, однако, как и бОльшая часть оупенсорса - требует или доработки напильником, или хитрой настройки, или гуру, который бы объяснил как надо работать. Парни сделали плагин к Visual Studio, затем свою серверную надстройку над SVN. С них и живут, причём &lt;a href="http://www.visualsvn.com/server/customers/"&gt;в клиентах&lt;/a&gt; у них значатся не последние компании из Fortune 500, а также куча американских госучреждений. В общем, люди определённо добились чего-то на непростом рынке систем контроля версий.&lt;br /&gt;&lt;br /&gt;Ситуация, описанная в начале - большая контора, все сидят на Visual SourceSafe, одиночки-энтузиасты пытаются изменить мир к лучшему - была типичной для российских компаний конца XX - начала XXI века. Мантра "так уж здесь повелось" до сих пор успешно работает практически повсеместно. Не сказать, чтобы это было плохо, но во многих ситуациях бывает проще перейти на новый тул, затратить усилия, чем продолжать тратить время и нервы на поддержку тула старого. Особенно если это СорсСэйф... Брр...&lt;br /&gt;&lt;br /&gt;Так и с контролем версий. Долгое время стандартом у нас был SourceSafe, просто потому, что шёл вместе со Студией (ибо она повсеместно была хакнутой). CVS, этот стандарт де-факто мира open source того времени, приживался не очень охотно (см. "Так уж здесь повелось"). На этом фоне Subversion стал тем продуктом, который вывел системы контроля версий на новый уровень и его применение стал нормальной практикой не только у нас в стране, но и вообще везде. Это же обстоятельство сыграло против него. Некоторая заторможенность в развитии вылилась в то, что нормальное слияние веток (merge) и его отслеживание ("стрелки мёржа") появилось буквально недавно даже по меркам софтварной индустрии. И если судить по интевью, переименование файлов и директорий будет сделано нормальным образом только в будущем.&lt;br /&gt;&lt;br /&gt;Одним словом, появление третьего поколения систем контроля версий стало вопросом времени и оно таки случилось. Новые поколения разработчиков считают стандартом уже не SVN, а git или Mercurial и недоумевают: "как можно работать с *№;%: SVN-ом, когда у меня тут распределённый контроль версий, всё быстро, продвинуто и вообще - Сам Линус его написал!" Флейм комментариев к интервью очень оказателен в этом смысле. Да и спорность некоторых реплик Ивана подливает масла в огонь.&lt;br /&gt;&lt;br /&gt;Что сказать - централизованные системы контроля ещё живы и никуда уходить не собираются, взгляните на тот же список клиентов VisualSVN - для них распределённость не является явным плюсом.&lt;br /&gt;&lt;br /&gt;Дабы не начинать холивар distributed vs. centralized VCS, на этом и закончу заметку :)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-3329579818663241068?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/3329579818663241068/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/12/visualsvn.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/3329579818663241068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/3329579818663241068'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/12/visualsvn.html' title='Интервью с техдиром VisualSVN и немного мыслей'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-1176690547973928763</id><published>2011-10-23T05:30:00.000-07:00</published><updated>2011-11-07T22:45:31.398-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p4'/><category scheme='http://www.blogger.com/atom/ns#' term='perforce'/><category scheme='http://www.blogger.com/atom/ns#' term='перевод'/><category scheme='http://www.blogger.com/atom/ns#' term='контроль версий'/><category scheme='http://www.blogger.com/atom/ns#' term='перфорс'/><title type='text'>Перевод // Dear Perforce: fuck you</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего!&lt;br /&gt;&lt;br /&gt;Кинули тут ссылочку на отличную заметку, буквально крик души человека, измученного &lt;strike&gt;нарзаном&lt;/strike&gt; Перфорсом. Называется он "&lt;a href="http://weblog.masukomi.org/2007/08/31/dear-perforce-fuck-you"&gt;Dear Perfoce: fuck you&lt;/a&gt;", что цензурно можно перевести как "Дорогой Перфорс, иди нахрен", но сведущие в английском поймут, о чём название.&lt;br /&gt;&lt;br /&gt;Решил перевести, поскольку сам с недавнего времени &lt;a href="http://scm-notes.blogspot.com/2011/09/perforce-basics.html"&gt;работаю с Перфорсом&lt;/a&gt; и наступил на некоторые грабли, которые малость испортили нервы. Да и продолжают портить, чего уж там. Замечу, что статья написана в 2007 году и прочитав её в 2011, я не увидел коренных отличий от ситуации на сегодня. Хотя я сам несколько терпимее отношусь к этому продукту :)&lt;br /&gt;&lt;br /&gt;Так что ниже - мой перевод исходной заметки, отдельные комментарии показаны в скобочках.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;Начало перевода&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;Дорогой Перфорс!&lt;br /&gt;&lt;br /&gt;Иди нахрен.&lt;br /&gt;Иди нахрен, жалкий, ненадёжный, обманчивый, переоценённый ублюдок. Надеюсь, твой офис сгорит дотла вместе со всеми сторонними бэкапами. Молюсь на то, чтобы какой-нибудь продукт с открытыми исходниками, при поддержке сильных мира сего, выкинет тебя из бизнеса. Надеюсь, твои "продажники" не одурачат больше ни одну компанию и не заставят их думать, что у тебя есть что-то, хотя бы отдалённо напоминающее по качеству древний говнопродукт, известный как CVS. Никогда раньше я не испытывал столько боли при работе с настолько простыми задачами по контролю версий, сколько испытал после устройства на работу в компанию, которая совершила ошибку и выбрала тебя.&lt;br /&gt;&lt;br /&gt;Я полностью согласн с &lt;a href="http://scm-notes.blogspot.com/2010/03/git-presentation-by-linus-torvalds.html"&gt;Линусом&lt;/a&gt;, который считает, что CVS - это зло, и что любой, кто использует его при наличии альтернативы - "тупой и ужасный", но я переключился бы с Перфорса на CVS, не моргнув глазом. Я бы пал ниц и лобызал ноги создателей CVS, если бы только смог избежать использования твоего "инструмента" самобичевания.&lt;br /&gt;&lt;br /&gt;В данный момент я единственный, кто работает с базой исходников.&lt;br /&gt;&lt;br /&gt;Уже четыре раза я приходил на работу, садился кодировать, открывал файл, который редактировал и сабмитил буквально&amp;nbsp;вчера, только для того, чтобы обнаружить, что он сейчас в какой-то предыдущей версии. Говорю Перфорсу взять последнюю версию, на что получаю ответ, что файл &lt;i&gt;уже&lt;/i&gt; синхронизирован. В конечном счете, я вынужден вызвать "sync -f" (то есть принудительно перезаписать всё или рискнуть поломать мой репозиторий сначала отредактировав файл, а потом внеся то, что у меня откатилось безо всякого предупреждения). Нет, юнит-тесты не помогут поймать эту проблему, ведь они точно так же откатятся на предыдущую версию, а поскольку я никогда не вношу поломаный код, то и после загадочного откатывания тесты будут показывать зеленую полоску, а я как-то не запоминаю в конце дня точное количество тестов каждого проекта. Сегодня он меня заставил сделать слияние ("мёрдж") "их" изменений. Вот только я единственный, кто работает на этой чёртовой ветке, и у меня всего один клиент, который на неё ссылается.&amp;nbsp;(Прим. пер.: у Перфорса во время слияния в окне с 3-хсторонним слиянием показаны "их" - "theirs", "ваши" - "yours"&amp;nbsp;и&amp;nbsp;измения&amp;nbsp;"общего предка")&lt;br /&gt;&lt;br /&gt;Когда вы попробуете "интегрировать" (везде оно известно как "смёрджить") файлы из директории А, где вы работали, в директорию Б, он скажет: в "их" файлах есть изменения, "ваши" файлы в порядке, и хотите ли принять "их" изменения? И вы видите, что "их" изменения - это то, что сделали ВЫ в директории А и "ваши" изменения - это те, что в директории, где вы вообще ничего не делали, и куда собираетесь смёрджить всё, что надо.&lt;br /&gt;&lt;br /&gt;Он меняет права на файлы. Он меняет окончания строк. Да, конечно, для этого всего есть настройки, но такого вообще не должно быть. Система контроля версий вообще не должна изменять файлы, которые в неё помещают. Инструменты командной строки - полнейший отстой. Если надо сделать что-то нетривиальное, то в конечном счёте придётся воспользоваться GUI-клиентом.&lt;br /&gt;&lt;br /&gt;Он недостаточно умён, чтобы понять, что файл, который ты поменял - это... погоди-ка... именно тот файл, который ты поменял! Ну, конечно, можете сказать "Господин Перфорс, с вашего позволения, я бы хотел отредактировать вон тот файл." и после этого он будет знать, но просто так файл отредактировать нельзя. Разговор чокнутых в стране сложившихся обстоятельств.&amp;nbsp;&amp;nbsp;(Прим. пер.: тут игра слов: "perforce land" - "&lt;a href="http://lingvo.yandex.ru/perforce/"&gt;perforce&lt;/a&gt;" переводится как "необходимость", "в силу сложившихся обстоятельств", или попросту "припекло") Если попробуете откатывать наборы изменений, он начнёт скулить о том, что не хочет затрагивать файлы, которым были сделаны права на запись после очередного отката, и это несмотря на то, что вы с ними ничего не делали, а только лишь откатили несколько раз.&lt;br /&gt;&lt;br /&gt;Он не умеет расширяться. Хотите положить в него терабайты данных? Он&amp;nbsp;это&amp;nbsp;позволит, но как только дерзнёте и вправду начнёте это делать, то при этом или вообще упадёт сервер, или больше&amp;nbsp;никто&amp;nbsp;не сможет нормально работать.&lt;br /&gt;&lt;br /&gt;Он определяет права по правилу XVII века под названием "запирание" (Приме. пер.: "locking"). Возможно это из-за того, что он не может наверняка сказать, работали вы над файлом ли нет. Выставляя файлам атрибут "только для чтения", он вынуждает явно ему сказать, когда захотите поменять файл, тем самым явно дав ему узнать, что вы поменяли файл. Он смутится и начнёт скулить, что надо засабмитить файлы и вы скажете их засабмитить, но сабмитить нечего, поэтому создается пустой набор изменений который он отказывается сабмитить, потому что набор - пустой. Этот пустой набор будет мозолить глаза, пока не взорвется солнце или пока вы сами не возьмёте и не удалите его... удалите то, что Перфорс сказал создать, но после создания - отказался принимать. (Прим. пер.: да-да, именно так и бывает)&lt;br /&gt;&lt;br /&gt;На это я&amp;nbsp;каждую неделю&amp;nbsp;убиваю по несколько часов.&lt;br /&gt;&lt;br /&gt;Обновление: Вы не подумайте, я не просто скулю насчет Перфорса. Да, он мне не нравится, и я по этому поводу кое-что сделал. Я взял и написал инструмент, синхронизирующий Перфорс с самыми разными системами контроля версий, но потом пришёл к выводу, что Git слишком чертовски хорош, чтобы заморачиваться с остальными, так что перешёл на Git с его git-p4 для синхронизации с &lt;strike&gt;Сатаной&lt;/strike&gt;&amp;nbsp;Перфорсом. Если интересно, его можно найти в директории contrib в исходниках git. Просто куда-нибудь скопируйте в другую дирку - и можно работать (но нужен Python).&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Что было дальше&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Я получил ряд комментариев и критики на статью, так что дальше - мои ответы. Комменты можно разбить на 3 основные категории, но прежде чем приступить к ним, хотелось бы указать на, чёрт побери, лучший ответ, который кто-либо давал на этот пост:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- У Перфорса просто другой подход. Надо попробовать в него погрузиться, прежде чем так сильно ругать.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Знаете, я как-то бился над, казалось бы, простой проблемой, используя Perl 5 тем способом, который считал самым подходящим, и сделал ошибку, упомянув о нём на открытом форуме.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;- Ну конечно, - последовал ответ - неопытных программистов всегда сбивает с толку то, как Перл дает то, что надо. Как только ты в него погрузишься, ты увидишь, что путь Перла - это правильно.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Я расширил описание ошибки и добавил, что между мной и моим напарником (с которым мы бились на проблемой) - десятилетия разницы в опыте.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;- Ну конечно, опытные програмеры думают, что их проблему Перл решит тем способом, который они от него ожидают, но к&lt;/i&gt;&lt;i&gt;ак только ты в него погрузишься, ты увидишь, что путь Перла - это правильно.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Примерно таков уровень обсуждений между програмерами касаемо инструментов.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Если что, я пользовался Perforce вполне успешно в нескольких местах (как например дома, как например в компании, раскиданной по нескольким континентам) и, да, тебе надо понять, что именно он думает насчёт контроля версий и конфигурационного управления - и это не обязательно будет совпадать с тем, что думаешь ты об этих же вещах. И, да, его реакция на неверные входные данные может быть совершенно аутичной. Всё, что он тебе говорит - &lt;/i&gt;верно&lt;i&gt;, но редко бывает полезным.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Фактически Perforce - это то, что называется "система со своим взглядом на вещи", у него есть свой взгляд на то, что такое контроль версий и конфигурационное&amp;nbsp;&lt;/i&gt;&lt;i&gt;управление&lt;/i&gt;&lt;i&gt;. Если у вас тот же взгляд на вещи - будете с ним летать. Если не тот - будете с ним бороться. Но в самом деле, как только вы в него погрузитесь, поймёте, что он довольно хорош &lt;/i&gt;в том, что делает&lt;i&gt;. Гораздо более хорош, чем SVN, особенно когда вы с ума сходите по, ну, вы знаете... &lt;/i&gt;ветвлению и слиянию&amp;nbsp;&lt;i&gt;кода.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Лучше ли он, чем Mercurial/git/прочие - не знаю, я их не использовал. Для тех вещей, что делают они, тем способом контроля версий, который хотят их пользователи, - видимо нет. И это нормально.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Остальные комментарии:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Комментарии типа "Я работал с ним на протяжении N лет, и ни разу у меня Перфорс не: испортил файл/сработал нестабильно/упал"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- Я использую Перфорс 4 года на своём проекте, но никогда не сталкивался с проблемами, о которых вы упоминаете&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Я говорил только об одной явной ошибке (странности с откатом), остальное же было намеренно запрограммировано разработчиками Перфорса. По мне, так он вовсе не сломан, он работает как задумано, просто&amp;nbsp;задумано - плохо.&lt;br /&gt;&lt;br /&gt;Чтоб совсем понятно было: Перфорс всё записывал правильно (ну кроме случая с окончанием строк, и я понимаю, что там всё настраивается), но тем не менее, я считаю, что система контроля версий не должна додумывать за меня, что же я имел в виду сделать. Ни один файл не испортился и не потерялся, и я ожидаю подобного в будущем.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- Хочу сказать, что несмотря на странности, он делает то, что написано на коробке.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;- Перфорс был непробиваем для нашей группы разработки ~10 человек и ~10000 файлов при использовании с Линукса, Виндов и МаксОСи.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Ни на минуту не сомневаюсь в указанных утверждениях. Уверен, именно так он себя и ведёт. У меня нет ни тени сомнения в том, что Перфорс - это стабильная и надёжная база для исходников. Я говорю только об инструментах конечного пользователя.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Коментарии типа "Да ты просто не умеешь им пользоваться/не дал ему ни единого шанса/ты специально его ломаешь"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Я без особых проблем ставил и начинал использовать Bazaar, CVS,&amp;nbsp;Darcs, Git, Mercurial (Hg) и Subversion, всегда меньше часа требовалось для начала полноценной работы даже без того, чтобы начать что-то гуглить. Я дал Перфорсу 2 месяца. Я разговаривал с разработчиками, работавшими с ним годами.&lt;br /&gt;&lt;br /&gt;Когда я говорю с опытными людьми, и на мои вопросы как правило отвечают тем, что или не знают как сделать с командной строки, только из GUI, или знают как сделать из комстроки или GUI, но понятия не имеют как оно так срабатывает. &lt;b&gt;Вы правы, я возможно не знаю как его использовать, но обучение базовым операциям управления исходным кодом (включая ветвление и слияние) не должно занимать 2 месяца!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Нет прощения за то, что люди, использующие его годами, до сих пор не могут объяснить, почему что-то происходит именно так, а не иначе, и/или как сделать какие-то похожие штуки. &amp;nbsp;Я полагаю, что что-то явно не так с тем, как Перфорс взаимодействует с пользователем. Так неинтуитивно, что даже годами используя его, всё равно не могут объяснить, как надо делать те или иные вещи.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- Проблемы есть только у тех, кто его не понимает и изучил "по верхам", вместо того, чтобы попросить о помощи.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Вот в этом я меньше всего сомневаюсь. Но вместо того, чтобы считать это признаком некомпетентности пользователя, может таки считать это проблемой Перфорса, которые не предоставляет интуитивно понятного интерфейса? Перфорс не проповедует парадигму с фундаментальными отличиями от других централизованных систем контроля версий. Стало быть, разве не должен он быть похожим и интуитивным для тех, кто уже работал с ними?&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- Похоже, вы используете его как распределённую систему контроля, хотя всё совсем наоборот. Подозреваю, большинство проблем - это результат того, что вы пытаетесь использовать его как svn, git или darcs. Надо использовать систему в том ключе, в котором она была спроектирована, а если архитектура вам не подходит, значит вообще не надо использовать эту&amp;nbsp;систему.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Ну, во-первых, SVN - не распределённая система. Помня об этом, распределённые системы контроля следует считать распоследним веянием в истории программной индустрии. Моим первым опытом с контролем версий был CVS, потом SVN. Так что я не пришел к этой ситуации имея за плечами лишь опыт использования распределённых систем, поэтому не пытаюсь уложить распределённую модель в централизованную систему. Я прекрасно знаю о разнице между ними, и, хотя я не в восторге от CVS или SVN, с ними у меня проблем никогда не было. Так что если уж чего проще и должен быть Перфорс, так это всех этих новомодных рапределённых штуковин.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- Вы совершенно несправедливы к Перфорсу. Надёжность - это наверняка проблема конфигурации. Модель же - сильно централизована, и видимо, это не то, что вам нужно.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Вообще, я не против централизованных систем. Просто я предпочитаю не их. Кроме того, надёжность никогда не должна быть проблемой конфигурации. У меня не должно быть возможности недоконфигурировать систему таким образом, что она сделается ненадёжной. Конечно, она может поломаться, но если уж работает, то должна работать надёжно. Если нельзя положиться на систему контроля версий, то с системой явно что-то не так.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- А я считаю, что инструменты командной строки - очень мощные и полезные.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Так и есть. Не могу отрицать, что они мощные и полезные. Блин, похоже GUI просто втихаря запускает те же самые команды почти на каждое действие. Я также верю, что истребитель F-16 такой же мощный и полезный, но он и близко не похож на что-то, что может быть полезным и мощным без предварительного серьёзного обучения. К сожалению, то же самое могу сказать и об инструментах командной строки Перфорса (хотя и не с таким временем обучения... я надеюсь).&lt;br /&gt;&lt;br /&gt;&lt;i&gt;- У Перфорса просто другой подход. Надо попробовать в него погрузиться, прежде чем так сильно ругать.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Ну почему мне кажется, что я один такой, кто видит постоянную проблему "мне он тоже показался странным, когда я начал его использовать". Нет, НЕТ, НЕТ, НЕТ. Такое ВООБЩЕ нельзя произносить. Перфорс существует уже больше десятилетия, и людям известен контроль версий ещё дольше. Не может быть никакого прощения за то, что на текущем этапе основые действия контроля версий могут чем-то непростым. У Перфорса было достаточно времени, чтобы переработать свои интерфейсы, сделать безумные вещи вроде команды "move" (дя, я знаю про команду "integrate", это не одно и то же). Говорить "странный" про совершенно новый инструмент, только что из "беты" - это нормально. Нормально говорить такое, про инструмент, использующий не ту парадигму, к которой вы привыкли. Ненормально говорить такое про такой старый инструмен, как Perforce, с такой старой парадигмой, как централизованный контроль версий.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Я согласен со всеми комментариями о том, что Перфорс - отстой.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Спасибо, приятно знать, что я&amp;nbsp;такой&amp;nbsp;не один.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;Конец перевода&lt;br /&gt;*/&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-1176690547973928763?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/1176690547973928763/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/10/dear-perforce-fuck-you.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/1176690547973928763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/1176690547973928763'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/10/dear-perforce-fuck-you.html' title='Перевод // Dear Perforce: fuck you'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-400143319952895319</id><published>2011-10-12T16:47:00.000-07:00</published><updated>2011-10-19T05:15:50.439-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clearcase'/><category scheme='http://www.blogger.com/atom/ns#' term='plastic scm'/><category scheme='http://www.blogger.com/atom/ns#' term='Plastic'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Осень - время релизов: IBM ClearCase 8.0, SVN 1.7, PlasticSCM 4.0</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Производители систем контроля версий собирают урожай.&lt;br /&gt;&lt;br /&gt;IBM решила тряхнуть стариной и выпустила &lt;a href="http://www-01.ibm.com/support/docview.wss?uid=swg21566807"&gt;ClearCase версии 8.0&lt;/a&gt;&amp;nbsp;.&lt;br /&gt;Вот &lt;a href="http://www-01.ibm.com/support/docview.wss?uid=swg21566805"&gt;список новых фич&lt;/a&gt;, кому интересно. Из заметного - сделали ещё более дружелюбный GUI - как десктопный, так и с веб-интерфейсом.&lt;br /&gt;&lt;br /&gt;Ну и не остался в стороне &lt;a href="http://subversion.apache.org/"&gt;Apache Subversion&lt;/a&gt; , он отрелизился &lt;a href="http://subversion.apache.org/docs/release-notes/1.7.html"&gt;до версии 1.7&lt;/a&gt;. Обещают ряд вкусностей. Например они таки избавились от папки .svn в каждой директории с подконтрольными файлами. Ну и общее ускорение работы обещают, как без него.&lt;br /&gt;&lt;br /&gt;Кстати, очень показателен флейм на Хабре по поводу релиза:&lt;br /&gt;&lt;a href="http://habrahabr.ru/blogs/development_tools/130214/"&gt;http://habrahabr.ru/blogs/development_tools/130214/&lt;/a&gt;&lt;br /&gt;SVN до сих пор вызывает эмоции, значит жив ещё, курилка :)&lt;br /&gt;&lt;br /&gt;Ну и ещё &lt;a href="http://scm-notes.blogspot.com/search/label/Plastic"&gt;Plastic SCM&lt;/a&gt;, про который я много писал, также решил &lt;a href="http://plasticscm.com/labs/40-beta-1.aspx"&gt;обрадовать обновлениями&lt;/a&gt;. У них там много всего нового, судя по периодическим новым заметкам в блоге, так что даже не могу выделить однозначно что-то большее, слишком много интересного.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-400143319952895319?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/400143319952895319/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/10/ibm-clearcase-80-svn-17-plasticscm-40.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/400143319952895319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/400143319952895319'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/10/ibm-clearcase-80-svn-17-plasticscm-40.html' title='Осень - время релизов: IBM ClearCase 8.0, SVN 1.7, PlasticSCM 4.0'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-201246547341454071</id><published>2011-09-29T23:04:00.000-07:00</published><updated>2011-09-29T23:04:55.134-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etraxis'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='bugtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='premium'/><category scheme='http://www.blogger.com/atom/ns#' term='issue tracking'/><title type='text'>eTraxis вышел на новую орбиту</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего!&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;За суетой чуть не забыл о важном.&amp;nbsp;Как известно постоянным читателям бложика, я пристально слежу за развитием&amp;nbsp;&lt;a href="https://www.etraxis.com/"&gt;eTraxis&lt;/a&gt; - системы для управления задачами, отслеживания ошибок, да и вообще трекинга чего угодно. Так вот, он сделал ещё один шаг вперёд! Его онлайн-версия,&amp;nbsp;&lt;a href="https://www.etraxis.com/"&gt;etraxis.com&lt;/a&gt;, о которой я уже писал,&amp;nbsp;теперь&amp;nbsp;стала полноценным продуктом.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Что значит полноценным? Теперь для пользователей стали доступны расширенные возможности работы, а именно - больше шаблонов, больше активных пользователей, больше места под вложения. Что значит продуктом - да, теперь за неё можно заплатить деньги. :) Были добавлены &lt;a href="https://www.etraxis.com/plans.php"&gt;тарифные планы&lt;/a&gt;, каждый из которых даёт расширенные возможности.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Конечно же, &lt;a href="https://www.etraxis.com/plans.php"&gt;бесплатный онлайн-трекинг&lt;/a&gt; всё также доступен и в нём по-прежнему действует ограничение на 2 активных шаблона записей и 5 пользователей. Если заказчику нужно больше пространства для манёвра - достаточно заплатить, например через банковскую карту.&amp;nbsp;Сейчас после регистрации в сервисе по умолчанию создается шаблон с типовым сценарием работы над проблемой и группы пользователей. Так что дополнительная настройка workflow - это уже шаг на усмотрение пользователя.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/p/etraxis/"&gt;Open source версия&lt;/a&gt; всё также никуда не делась. Она по-прежнему доступна и активно поддерживается. Новые версии как выходили, так и будут продолжать выходить стабильно. Функциональность open source решения полностью поддерживается онлайн-сервисом и опробуются именно там.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Итак, заходим, пробуем, ну и конечно же покупаем :)&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-201246547341454071?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/201246547341454071/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/09/etraxis-premium-bugtracking.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/201246547341454071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/201246547341454071'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/09/etraxis-premium-bugtracking.html' title='eTraxis вышел на новую орбиту'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-3045551815283842990</id><published>2011-09-29T00:41:00.000-07:00</published><updated>2011-09-29T22:35:59.903-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='п4'/><category scheme='http://www.blogger.com/atom/ns#' term='p4'/><category scheme='http://www.blogger.com/atom/ns#' term='perforce'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='контроль версий'/><category scheme='http://www.blogger.com/atom/ns#' term='перфорс'/><title type='text'>Впечатления от работы с Perforce</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Как уже писал чуть ранее, я по &lt;a href="http://scm-notes.blogspot.com/2010/06/piano-player-at-brothel.html"&gt;роду деятельности&lt;/a&gt; после &lt;a href="http://scm-notes.blogspot.com/2011/08/blog-post.html"&gt;смены места&lt;/a&gt; работы активно осваиваю новое пианино - &lt;a href="http://www.perforce.com/"&gt;Perforce&lt;/a&gt;. Часто его сокращённо называют P4.&lt;br /&gt;&lt;br /&gt;До этого на Перфорс доводилось только глядеть через плечо коллег, работавших с ним на небольшом проекте. Так что, можно сказать, знакомство начал с чистого листа. Почитал материалы тренинга и по ходу дела смотрел доки на сайте самого Перфорса.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Общие основы&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Perforce - типичная централизованная система контроля версий. Есть сервер, который хранит историю изменений подконтрольных сущностей в репозиториях, которые называются depot. Читается как "дипоу", но вообще - просто депо, типа как трамвайное. Клиент, подключаясь к серверу, берет нужную часть сущностей к себе на локальную машину. С этого момента программа-клиент П4 создает т.н. workspace, т.е. рабочее пространство.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Все изменения, вносимые в workspace, при желании отправляются на сервер, в соответствующее депо. Процесс отправки называется традиционно - submit. Отправляемые изменения - атомарны, и работа идет посредством change lists, т.е. списков изменений, отправляемых единой транзакцией. Изменил десяток файлов - посылаешь их через сабмит. Если что-то пошло не так - всё изменение откатывается.&lt;br /&gt;&lt;br /&gt;Списки имеют каждый свой номер - примерно как в SVN есть сквозные номера ревизий. Создавая новый список, ему можно или самому присвоить очередной номер, или не присваивать и при сабмите это сделает сам Перфорс.&lt;br /&gt;&lt;br /&gt;Если нет желания засабмитить изменения, но нужно показать результат работы кому-либо - используется механизм shelving. Нужные файлы выкладываются "на отдельную полку" всем причастным, их просматривают, делают правки и берут обратно. Похожий механизм используется в Microsoft TFS.&lt;br /&gt;&lt;br /&gt;Работа ведется в основном в GUI-оболочке, P4V. Однако можно использовать и командную строку. Но P4V достаточно удобен, отторжения и неудобств он не вызывает.&lt;br /&gt;&lt;br /&gt;Что касается обеспечения распределённости разработки и балансировки нагрузки, то несколько серверов могут быть реплицированы между собой. Можно спокойно работать с прокси-сервером и новые изменения будут доступны всем серверам по мере обмена данными между ними. В ClearCase аналогом является механизм MultiSite.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;File mappings&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Первая особенность Перфорса от большинства систем контроля версий - использование для связи структуры файлов в depot и их отображения на структуру директорий механизма file mapping. Т.е. это отображение файлов из депо на файловую систему пользователя.&lt;br /&gt;&lt;br /&gt;Например, рабочее окружение под названием&amp;nbsp;my_workspace&amp;nbsp;настроено в директорию C:\workspaces\my_workspace\ . В настройках workspace пишется например такое:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;//depot/... //my_workspace/...&lt;/span&gt;&lt;br /&gt;Это означает, что структура будет отображена один-к-одному. Теперь достаточно взять последние версии файлов отдельной командой - и в директории на диске появится срез исходников.&lt;br /&gt;Можно также комбинировать файлы из разных источников. Например, если есть депо с исходниками двух модулей - //depot1/module1 и //depot2/module2, а также приложение, которое их использует - //app_depot/main/, то соорудив вот такие правила&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;//depot1/module1/...&amp;nbsp;//my_workspace/modules/module1/...&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;//depot2/module2/...&amp;nbsp;//my_workspace/modules/module2/...&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;//app_depot/main/...&amp;nbsp;//my_workspace/main/...&lt;/span&gt;&lt;br /&gt;можно получать срез&amp;nbsp;нужных&amp;nbsp;исходников автоматически в нужной структуре директорий.&lt;br /&gt;Есть ещё несколько возможностей, связанных с mapping, но общий смысл - именно такой.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ветвление, слияние и метки&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Модель ветвления похожа на модель Subversion. Как и в SVN, здесь ветка образуется копированием структуры нужной директории в любое место депо. Лично мне такой подход не нравится по принципиальным соображениям, однако - он вот такой. В работе столкнулся с тем, что хотя образование ветки процесс быстрый (работает cheap copy), получается всё равно довольно громоздко, т.к. для отстройки исходников файлы приходится всё равно доставать из депо в полном составе. При количестве файлов в ветке, исчисляемом тысячами, процесс растягивается на долгие минуты и даже, при плохой связи, на часы.&lt;br /&gt;&lt;br /&gt;При этом, в отличие от Сабвершна, метки там - это действительно метки. То есть метка - это бирка, которая вешается на нужную версию выбранного файла. Т.е. вешая метку на какую-то директорию в какой-то момент времени, пользователь помечает видимые версии каждого файла внутри директории нужной информацией. И при необходимости по этой метке можно воссоздать нужный срез исходников. Есть и побочный эффект, которого я не встречал нигде больше - меткой можно пометить одновременно два ответвления файловой структуры. Я пока не видел как бы это могло кому-то понадобиться, но в других системах это в принципе невозможно. Занятно, в общем.&lt;br /&gt;&lt;br /&gt;Для удобства интеграции механизм mapping, описанный выше, был расширен не только для взятия файлов из депо, но и для ветвления и выставления меток. Например, если часто делается интеграция с ветки для новой фичи на основную ветвь разработки, то создается mapping, где прописываются оба бранча, и дальнейшая интеграция сводится к паре кликов. Аналогично - с метками.&lt;br /&gt;&lt;br /&gt;Что касается слияния, то как и SVN, Перфорс не блещет ни скоростью, ни сообразительностью. Да, оно успешно сливает вместе две ветки с общим предком. Даже использует для этого 3-хстороннее слияние, т.е. определяет общего предка. При этом скорость при работе с файлами размером в несколько десятков Кб и 2-3-хгодичной историей весьма низка, бывает до десятка секунд. Дефолтный инструмент сравнения и слияния, при всей и наглядности и удобстве, при сложных сравнениях просто начинает выдавать несуразицу, например совершенно не сращивает перемещение кода по файлу.&amp;nbsp;Перемещение и переименование файлов отрабатывает иногда как перемещение, а иногда - как удаление и создание нового файла. Изменения между такими файлами, которые в одной ветке переименованы, а в другой - остались на месте, практически не отслеживаются вообще.&lt;br /&gt;Допускаю, что у меня были сложные нетривиальные случаи - история у многих файлов очень большая и разветвлённая - но конкретно для меня слияние оказалось не очень предсказуемым и стабильным функционалом.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Управление доступом&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Что откровенно порадовало - так это управление доступом.&lt;br /&gt;&lt;br /&gt;Для удобства все пользователи могут разбиться по группам. У каждого юзера или группы могут быть права разных уровней - от полного отказа в доступе до полных прав, включая запись или создание ветки. В общем, вполне стандартные возможности.&lt;br /&gt;&lt;br /&gt;Сами же права прописываются в виде текста, где перечисляются права на доступ, имя юзера или группы, IP-адрес или диапазон, для которого применимы права, и директория, на которые права прописываются (wildcards также применимы). Чем ниже правило, тем оно приоритетнее.&lt;br /&gt;&lt;br /&gt;Простая схема, но она даёт все возможности для гибкого управления доступом.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Общее впечатление&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Общее впечатление сейчас скорее положительное, несмотря на некоторые неудобства. Я бы сказал, что Perforce - это по сути сильно улучшенный Subversion с хорошим GUI. Но при этом платный.&lt;br /&gt;&lt;br /&gt;По мере погружения в глубины Перфорса, наверное, что-то ещё напишу.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-3045551815283842990?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/3045551815283842990/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/09/perforce-basics.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/3045551815283842990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/3045551815283842990'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/09/perforce-basics.html' title='Впечатления от работы с Perforce'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-5398404287986439168</id><published>2011-08-08T22:54:00.000-07:00</published><updated>2011-09-29T00:45:25.186-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='работа'/><category scheme='http://www.blogger.com/atom/ns#' term='rhonda'/><title type='text'>Второй раз в ту же реку</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Как-то за суетой забыл совсем - не так давно я вернулся на &lt;a href="http://www.rhondasoftware.com/"&gt;предыдущее место работы&lt;/a&gt;. Я теперь снова - &lt;a href="http://scm-notes.blogspot.com/2010/06/piano-player-at-brothel.html"&gt;СМ-инженер&lt;/a&gt;. Снова большая корпорация, снова embedded-системы, снова контрактор. Всё как я люблю, в общем. :) Как поется в шлягере гражданина Бадди Гая: "Back to the same old place..."&lt;br /&gt;&lt;br /&gt;Основной инструмент теперь -&amp;nbsp;&lt;a href="http://perforce.com/"&gt;Perforce&lt;/a&gt;, а также JIRA, не считая ещё нескольких инструментов.&amp;nbsp;В ближайшее время будет пост про личные впечатления от Перфорса. Откровений, шокирующих подробностей и скриншотов не ждите, ибо &lt;a href="http://en.wikipedia.org/wiki/Non-disclosure_agreement"&gt;NDA&lt;/a&gt; никто не отменял.&amp;nbsp;Следите за RSS-лентой, что ещё сказать.&lt;br /&gt;&lt;br /&gt;P.S.&amp;nbsp;Теперь, спустя 2 года после заведения блога с записками отставного сиэмщика, впору его как-нибудь переименовать. Но не стану. Меня вот уже и в поиске по этому позывному находят.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-5398404287986439168?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/5398404287986439168/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/08/blog-post.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5398404287986439168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5398404287986439168'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/08/blog-post.html' title='Второй раз в ту же реку'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-69803485413148530</id><published>2011-08-04T01:05:00.000-07:00</published><updated>2012-01-26T13:15:40.868-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='redmine'/><category scheme='http://www.blogger.com/atom/ns#' term='задача'/><category scheme='http://www.blogger.com/atom/ns#' term='закрыть'/><category scheme='http://www.blogger.com/atom/ns#' term='выполнено'/><category scheme='http://www.blogger.com/atom/ns#' term='рэдмайн'/><title type='text'>Как закрыть задачу в Redmine</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Ко мне в бложик часто заходят люди по запросам, связанным с закрытием задачи в Рэдмайне. Им в Redmine надо отметить задачу, как выполненную.&amp;nbsp;Видимо, при всей навороченности этой системы, простейшие операции по началу вызывают недоумение. Хотя всё довольно просто и проистекает из идеологии всей системы. Если вы прочитали предыдущие &lt;a href="http://scm-notes.blogspot.com/search/label/redmine"&gt;заметки про Redmine&lt;/a&gt;, всё должно быть понятно. Но читали их не все (хотя и стоило бы).&lt;br /&gt;&lt;br /&gt;Чтоб, как говорится, два раза не вставать - пишу здесь отдельным постом.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Итак, задачи в Рэдмайне находятся в любой момент времени в каком-то одном статусе. Статус бывает трёх видов - начальный, промежуточный и конечный. Закрытой запись считается тогда, когда ей присвоили конечный статус. Такими статусами считаются&amp;nbsp;Закрыта и Отклонена.&lt;br /&gt;&lt;br /&gt;Соответственно, &lt;b&gt;чтобы&amp;nbsp;в Redmine&amp;nbsp;закрыть задачу&lt;/b&gt;, нужно поменять статус. Сделать это можно двумя способами.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Способ первый&lt;/b&gt;. Заходим с интересующую задачу. Нажимаем кнопку Update (Обновить). Появляется форма обновления задачи. Ищем поле Статус, выбираем подходящий пункт, жмём Submit - заслать, стало быть.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Способ второй&lt;/b&gt;, для ленивых. Находясь в списке задач, нажимаем на нужной задаче правой кнопкой мыши и в выпадающем меню выбираем Статус и далее - закрывающий статус.&lt;br /&gt;&lt;br /&gt;Всё.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-69803485413148530?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/69803485413148530/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/08/redmine-close-issue.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/69803485413148530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/69803485413148530'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/08/redmine-close-issue.html' title='Как закрыть задачу в Redmine'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-7348176038665078279</id><published>2011-07-26T02:59:00.000-07:00</published><updated>2011-07-26T03:14:46.657-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='eric sink'/><category scheme='http://www.blogger.com/atom/ns#' term='veracity'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Version Control by Example - свежая книжка про контроль версий</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&amp;nbsp;Добрейшего!&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Рад сообщить, что вышла книга&amp;nbsp;&lt;a href="http://www.ericsink.com/vcbe/"&gt;Version Control by Example&lt;/a&gt;&amp;nbsp;(&lt;b&gt;Управление версиями в примерах&lt;/b&gt;). Поскольку я пристально слежу за&amp;nbsp;&lt;a href="http://scm-notes.blogspot.com/p/scm-books.html"&gt;книгами по SCM&lt;/a&gt;, появление новых трудов всегда интересно.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.ericsink.com/vcbe/1802_image001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://www.ericsink.com/vcbe/1802_image001.jpg" width="151" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Автор книги -&amp;nbsp;&lt;a href="http://www.ericsink.com/vcbe/html/author_background.html"&gt;Eric Sink&lt;/a&gt;&amp;nbsp;(Эрик Синк), человек и пароход, который живет именно системами контроля версий и другими девелоперскими инструментами&amp;nbsp;уже не один десяток лет. Сейчас он вместе с командой создает&amp;nbsp;&lt;a href="http://www.veracity-scm.com/"&gt;Veracity&lt;/a&gt;, распределенную систему контроля версий.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Текст выложен в виде HTML и PDF, в скором времени будут доступны бумажные копии и версия для Kindle.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Труд целиком посвящен контролю версий, и только ему. Никаких отступлений в сторону общих практик SCM, например багтрекинга, контроля изменений, управления релизами или чего-то подобного. Нет, только чистый контроль версий с точки зрения его базовых функций и примеры работы с 4 выбранными системами. Написана живо, с юмором даже местами, читать приятно и не напряжно.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;Что внутри?&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Часть I -&amp;nbsp;&lt;b&gt;Centralized version control&lt;/b&gt;&amp;nbsp;(Централизованный контроль версий) - целиком посвящена централизованным системам контроля версий (CVCS) на примере&amp;nbsp;&lt;b&gt;Subversion&lt;/b&gt;. Сначала перечисляются и описываются все базовые команды подобных систем, причем в качестве иллюстраций дается "Джоконда" Да Винчи. Над ней выполняют разные манипуляции - подрисовывают усы, шляпу или ещё как-нибудь издеваясь, тем самым показывая наглядно - что такое изменение, добавление, удаление, дельта и прочие термины. Далее эти команды рассматриваются на примере реальной системы - SVN. Пример взят доходчивый, и код, и текст читаются легко.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Часть II -&amp;nbsp;&lt;b&gt;Distributed Version Control&lt;/b&gt;&amp;nbsp;(Распределенный контроль версий)&amp;nbsp;- значительно более обширна. Даётся общее описание модели распределенных систем, приводятся плюсы и минусы, которые также честно описываются. После чего поочередно для всё того же примера, приведенного в главе про SVN, рассматриваются&amp;nbsp;&lt;b&gt;Mercurial&lt;/b&gt;,&amp;nbsp;&lt;b&gt;git&lt;/b&gt;&amp;nbsp;и&amp;nbsp;&lt;b&gt;Veracity&lt;/b&gt;. Конечно, на последнем сосредоточено больше внимания, т.к. это&amp;nbsp;детище самого Эрика,&amp;nbsp;однако мне лично было интересно почитать,&amp;nbsp;система и впрямь занятная получилась. Опять же, давно хотел попробовать в деле - после такого описания будет повод взяться.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Часть III -&amp;nbsp;&lt;b&gt;Beyond Basics&lt;/b&gt;&amp;nbsp;(Когда основы уже пройдены)&amp;nbsp;- рассказывает о более нетривиальных вещах. В первую очередь дает краткий обзор типовых способов работы (workflows). Ничего нового, но кому-то может быть полезным. Далее углубляется в устройство DVCS - довольно занимательное чтение. Ну и напоследок ряд советов по организации работы. Какие-то тривиальны, какое-то спорны, но в целом, полезны.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Итог&lt;/b&gt;. Если в вашей команде кому-то надо ознакомиться с контролем версий с нуля или же обновить свои знания в этой области - эта книжка как раз подойдёт, можно смело брать.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-7348176038665078279?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/7348176038665078279/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/07/version-control-by-example.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7348176038665078279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7348176038665078279'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/07/version-control-by-example.html' title='Version Control by Example - свежая книжка про контроль версий'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-5321018628538856350</id><published>2011-05-26T00:48:00.000-07:00</published><updated>2011-10-17T23:16:39.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='p4'/><category scheme='http://www.blogger.com/atom/ns#' term='perforce'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='code review'/><title type='text'>Контроль версий и SCM в Google</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Давно ищу разную информацию, касающуюся SCM в Google. Всегда ведь интересно знать, как работают крупные команды. Были разрозненные данные, и вот не так давно появился повод подытожить то, что известно. Нашелся хороший человек, который там работает, он не смог дать подробную инфу в силу &lt;a href="http://en.wikipedia.org/wiki/Non-disclosure_agreement"&gt;NDA&lt;/a&gt; (что вполне понятно и ожидаемо), однако дал подсказки для раскопок общедоступных данных, за что ему спасибо.&lt;br /&gt;&lt;br /&gt;Итак, Гугл использует &lt;a href="http://www.perforce.com/"&gt;Perforce&lt;/a&gt;. Использует практически на всех внутренних проектах.&amp;nbsp;Есть сведения, что в&amp;nbsp;Youtube его создатели использовали Subversion до покупки Гуглом, но наверняка сейчас их перевели на общую платформу.&lt;br /&gt;Для "наружного применения" компания выдаёт все популярные open source системы. В первую очередь это git - через него идёт предоставление исходников платформы Android. Ну а Google Code предоставляет централизованный канонический Subversion и распределённые Mercurial и git (из DVCS сначала&amp;nbsp;&lt;a href="http://scm-notes.blogspot.com/2011/02/mercurial-git-google-code.html"&gt;выбирали между Hg и git&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Над Perforce располагается широкая прослойка из инструментов, заточенных под работу именно на гугловыми проектами. Вплоть до того, что командой для работы с системой является не "p4", а "g4". Многие &amp;nbsp;костыли или workarounds, сделанные из-за недостатка функционала, до сих пор работают, несмотря на то, что в самом Перфорсе это уже давно реализовано. Работает старый принцип "работает - не трогай", ведь переделывать инфраструктуру - дело непростое, и зачастую очень богатое на ошибки. Так что после выхода очередной версии P4 её сначала разворачивают на отдельном оборудовании, накатывают сверху все внутренние тулзы, а уж потом, когда всё настроится и заработает, выкатывают это всем остальным.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Сам Perforce работает на системе серверов в режиме 24/7. Оно и понятно, над исходниками проектов работают круглые сутки со всех точек мира. И конечно, его сопровождением занимается выделенная команда инженеров.&lt;/div&gt;&lt;br /&gt;Работа ведется без использования веток. Уж не знаю, чем это вызвано - сложностями работы с Перфорсом или другими соображениями - однако оно вот так. Для того, чтобы на транке не появлялись глючные изменения, их необходимо проверять перед тем, как помещать под контроль версий. Долгое время это делалось посредством обмена email-ами и работой через NFS, где расшаривалось рабочее пространство всех пользователей. Потом в 2006 году в компанию пришёл&amp;nbsp;Гвидо ван Россум, создатель языка Python, и сделал систему ревью кода под названием Mondrian. Она позволяет по-прежнему инспектировать изменения до их помещения под контроль версий, но сейчас до коммита вся информация о дельте и комментариях к ней лежит в BigTable (гугловая система ранения). Конечно, удобный веб-интерфейс (Python + JavaScript) сильно упрощает работу, но вот вводить лишнюю сущность для хранения просто потому, что не принято класть изменения на ветки - по меньшей мере странно. Но - им виднее.&lt;br /&gt;&lt;br /&gt;При этом широко используются релиз-инженеры. Судя по&amp;nbsp;вакансиям, они занимаются всем, что требуется для доставки изменения от разработчика к конечному потребителю. Выпуск очередных версий систем, поддержание работы системы контроля версий, багтрекинг и всё то, что составляет инфраструктуру современного SCM.&lt;br /&gt;&lt;br /&gt;Касательно багтрекинга и вообще процесса работы непосредственно над кодом - тут всё разнится от проекта к проекту. Вполне ожидаемо учитывая сколько разных проектов живет под крышей Гугла. Опять таки, многие проекты когда-то были отдельными компаниями, со своей инфраструктурой, так что хорошо уже то, что у них всех есть по крайней мере одна общая часть - система контроля версий.&lt;br /&gt;&lt;br /&gt;Данные брались из разных материалов, однако основой служат 2 презентации:&lt;br /&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Perforce Users Conference 2010:&amp;nbsp;&lt;a href="http://filehost.perforce.com/downloads/media/userconftalks/2010/google/google.html"&gt;Developing and Maintaining an Ongoing Strategic Perforce Plan at Google&lt;/a&gt; by&amp;nbsp;Geoff Mendal.&lt;/li&gt;&lt;li&gt;Google Tech Talk 2006: &lt;a href="http://www.youtube.com/watch?v=sMql3Di4Kgc"&gt;Mondrian Code Review On The Web&lt;/a&gt; by&amp;nbsp;Guido Van Rossum.&lt;/li&gt;&lt;/ul&gt;Кстати, ван Россум сделал из Mondrian отдельное приложение, которые можно взгромоздить поверх Subversion и Google App Engine, называется&amp;nbsp;&lt;a href="http://code.google.com/appengine/articles/rietveld.html"&gt;Rietveld&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Если есть кому что добавить - велкам.&lt;br /&gt;&lt;br /&gt;P.S. Для сравнения можно прочитать &lt;a href="http://scm-notes.blogspot.com/2010/03/scm-microsoft.html"&gt;Немного об SCM в Microsoft&lt;/a&gt; и &lt;a href="http://scm-notes.blogspot.com/2010/03/windows-software-engineering-odyssey.html"&gt;Windows. A Software Engineering Odyssey&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-5321018628538856350?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/5321018628538856350/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/05/google-scm-code-review.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5321018628538856350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5321018628538856350'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/05/google-scm-code-review.html' title='Контроль версий и SCM в Google'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-2507570295912341930</id><published>2011-05-24T05:38:00.000-07:00</published><updated>2011-05-24T05:38:29.759-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rsdn'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='гит'/><category scheme='http://www.blogger.com/atom/ns#' term='git extentions'/><title type='text'>Git в картинках на RSDN</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Постоянные читатели бложика знают мой скепсис по поводу распределённых систем контроля версий вообще и git в частности. Однако нет-нет, да и проскакивают ссылки, которые просто необходимо &lt;strike&gt;утащить в нору&lt;/strike&gt; сохранить в бложике, чтоб не потерялись. Может кому и пригодится.&lt;br /&gt;&lt;br /&gt;Сегодня увидел как раз такую - &lt;a href="http://www.rsdn.ru/article/tools/Git.xml"&gt;Git в картинках&lt;/a&gt;&amp;nbsp;за авторством Игоря Ткачёва, одного из родоначальников и апологетов сообщества RSDN. Название говорит само за себя - объясняется на картинках, как работать с git через git extentions (оконную надстройку над гитом). Объяснение простое и доходчивое, даже я понял что к чему.&lt;br /&gt;&lt;br /&gt;В общем, кто давно хотел подружится с git, но боялся ч0рной командной строки и непонятного английского - это для вас.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-2507570295912341930?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/2507570295912341930/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/05/git-rsdn.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2507570295912341930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2507570295912341930'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/05/git-rsdn.html' title='Git в картинках на RSDN'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-6792313598070966466</id><published>2011-05-04T05:48:00.000-07:00</published><updated>2011-05-04T06:06:56.717-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='контроль версий'/><category scheme='http://www.blogger.com/atom/ns#' term='заповеди'/><category scheme='http://www.blogger.com/atom/ns#' term='source control'/><title type='text'>10 заповедей хорошего контроля версий</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Подкинули ссылку на хорошую статью из серии "10 тут-написать-самое-важное". Не смог пройти мимо, т.к. речь - о контроле версий! Называется &lt;a href="http://www.troyhunt.com/2011/05/10-commandments-of-good-source-control.html"&gt;The&amp;nbsp;10 commandments of good source control management&lt;/a&gt;, или "&lt;b&gt;10 заповедей хорошего контроля версий&lt;/b&gt;".&lt;br /&gt;&lt;br /&gt;Надо бы её перевести, но пока - перечень Важных Вещей:&lt;br /&gt;&lt;ol style="text-align: left;"&gt;&lt;li&gt;Если используете VSS - бросьте сейчас же. Прям щас!&lt;/li&gt;&lt;li&gt;Если что-то не лежит под контролем версий - этого не существует.&lt;/li&gt;&lt;li&gt;Делайте коммиты раньше, чаще и не откладывая.&lt;/li&gt;&lt;li&gt;Всегда проверяйте изменения перед коммитом.&lt;/li&gt;&lt;li&gt;Помните про психопата с топором перед написанием комментариев.&lt;/li&gt;&lt;li&gt;Делайте коммиты сами, не перекладывая на других.&lt;/li&gt;&lt;li&gt;Версионности БД избежать не получится.&lt;/li&gt;&lt;li&gt;Результаты компиляции не кладутся под контроль версий.&lt;/li&gt;&lt;li&gt;Никому не интересны ваши личные настройки.&lt;/li&gt;&lt;li&gt;Зависимости надо тоже пристроить.&lt;/li&gt;&lt;/ol&gt;Как-то так. Просто и понятно. Да ещё и написано с юмором, так что рекомендую.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-6792313598070966466?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/6792313598070966466/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/05/10-commandments-of-good-source-control.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6792313598070966466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6792313598070966466'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/05/10-commandments-of-good-source-control.html' title='10 заповедей хорошего контроля версий'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-7832369897298513327</id><published>2011-04-20T21:52:00.000-07:00</published><updated>2011-04-20T21:53:10.284-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='гитхаб'/><category scheme='http://www.blogger.com/atom/ns#' term='студенты'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='гит'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><title type='text'>gihub для совместной работы студентов</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего!&lt;br /&gt;&lt;br /&gt;На Хабре опубликовали интересную заметку -&amp;nbsp;&lt;a href="http://habrahabr.ru/blogs/development/117852/"&gt;Системы управления версиями как инструмент совместной работы студентов&lt;/a&gt;. Ещё один интересный пример использования гитхаба не по прямому назначению :) про другой я &lt;a href="http://scm-notes.blogspot.com/2011/03/scm-github.html"&gt;недавно писал&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Мне, как преподавателю, решение представляется&amp;nbsp;интересным. Повторю здесь то, что написал в комментариях.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Положительные стороны:&lt;br /&gt;- Централизованное хранилище заданий и результатов. Во многих ВУЗах этого до сих пор нет, а тут - всё под рукой. И не будет типичных проблем накануне сессии из серии "у меня вчера вылетел жесткий диск, что смог, то восстановил, поставьте-хотя-бы-тройку!!!" :)&lt;br /&gt;- Обучение системам контроля версий и багтрекингу. Очень правильно.&lt;br /&gt;- Практика командного взаимодействия. Сначала - между преподом и студентом, потом обязательно начинается работа внутри группы. К тому же многие учебные программы имеют курсовые или лабораторные, прямо предназначенные для коллективной работы. &lt;br /&gt;&lt;br /&gt;Отрицательные стороны:&lt;br /&gt;- Необходимость наличия интернета. Да, для многих ВУЗов это до сих пор проблема. Кроме того, есть компьютерные классы, где выход в интернет запрещён или невозможен по техническим причинам.&lt;br /&gt;- Привязка с конкретному инструменту. git и те тулзы, которые доступны на гитхабе - на них свет клином не сошелся. Есть, к примеру, ещё и централизованные VCS, они всё ещё имеют немалое право на существование, особенно коммерческие решения. В общем, получится очень однобоко, а это не есть правильно с точки зрения учебного процесса.&lt;br /&gt;- Работа на стороннем сервисе. Пользователь не контролирует данные, находящиеся на сервисе. Но поскольку данные эти - не несут коммерческой инфы и их утрата не окажет большого влияния на учебу в целом (есть локальные копии), то минус это небольшой.&lt;br /&gt;- Нет гарантии, что гитхаб не изменит свою политику и не ограничит подобные варианты использования.&lt;br /&gt;&lt;br /&gt;А вообще - интересно.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-7832369897298513327?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/7832369897298513327/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/04/gihub-students-use-case.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7832369897298513327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7832369897298513327'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/04/gihub-students-use-case.html' title='gihub для совместной работы студентов'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-1373012549536817430</id><published>2011-04-13T15:56:00.000-07:00</published><updated>2011-04-14T20:10:28.434-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ртутный'/><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='upgrade'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='убунту'/><title type='text'>Узелок на память: upgrade Mercurial 1.8 для Ubuntu 10.04</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Набрёл на относительно недавний свой коммент к статье, решил, что стоит запомнить исходную статью в бложике.&lt;br /&gt;&lt;br /&gt;Вводная. В общем, не так давно я таки поставил себе Убунту и начал с энтузазизьмом её заселять и осваивать на предмет замены Виндоуз в кажестве десктопа. И поскольку с некоторых пор активно использую для личных нужд Mercurial (параллельно с Subversion, да) - поставил и его туда.&lt;br /&gt;&lt;br /&gt;Проблема. С Убунтой 10.04 (на мой новый ноут встала только она, 10.10 залазить не хотела) идет Ртутный версии то ли 1.5, то ли 1.6. Я же использовал к тому времени 1.8 и, как выяснилось, старые версии с репами от более новых версий работать отказываются. Убунтовый тул для апгрейда показывал, что в Убунтовых репозиториях доступна только старая версия.&lt;br /&gt;&lt;br /&gt;Решение. Немного погуглив, нашел &lt;a href="http://icephoenix.us/linuxunix/installing-mercurial-1-5-or-1-6-on-ubuntu-lucid-lynx-10-04/"&gt;отменный рецепт решения&lt;/a&gt;, и довольно простой, в убунтовом стиле, я бы даже сказал. Собственно, это 3 строчки&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;gt; sudo add-apt-repository ppa:mercurial-ppa/releases&lt;br /&gt;&amp;gt;&amp;nbsp;sudo apt-get update&lt;br /&gt;&amp;gt;&amp;nbsp;sudo apt-get install mercurial&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Проверяем результат с помощью&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&amp;gt;&amp;nbsp;hg --version&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Кому надо ещё проапгрейдить TortoiseHg - в статье и про это есть.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-1373012549536817430?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/1373012549536817430/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/04/upgrade-mercurial-18-ubuntu-1004.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/1373012549536817430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/1373012549536817430'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/04/upgrade-mercurial-18-ubuntu-1004.html' title='Узелок на память: upgrade Mercurial 1.8 для Ubuntu 10.04'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-7843664525976271440</id><published>2011-04-12T05:26:00.000-07:00</published><updated>2011-04-12T05:28:38.716-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CI'/><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Пример описания процесса создания релизов</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего!&lt;br /&gt;&lt;br /&gt;Не так давно (ну хорошо, почти год назад) я решил &lt;a href="http://scm-notes.blogspot.com/2010/08/choosing-right-tool.html"&gt;сформулировать для себя&lt;/a&gt; задачи по улучшению инфраструктуры разработки. Проще говоря - надо было уже начать что-то менять в SCM-процессе, и не только в нём.&lt;br /&gt;&lt;br /&gt;Упоминавшаяся там команда Ф - достаточно обособленная, но самая крупная, и задачи решает самые разнообразные. Так вот, один из разработчиков нашел время и &lt;a href="http://dotsid.blogspot.com/2011/04/blog-post.html"&gt;описал процесс построения билдов&lt;/a&gt; и всего, что с этим связано. Фактически, описан процесс выпуска релизов от &amp;nbsp;получения исходников до начала развёртывания. Применяется много практик из continuous integration, но ими не ограничивается, а сам процесс описывается для Java.&lt;br /&gt;&lt;br /&gt;Рекомендую ознакомиться для общего развития. Даже если ваш процесс отличается или вы только собираетесь что-то внедрять, заметка и названия тулов дадут направление, куда смотреть.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-7843664525976271440?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/7843664525976271440/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/04/build-process.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7843664525976271440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7843664525976271440'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/04/build-process.html' title='Пример описания процесса создания релизов'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-243640398658914906</id><published>2011-03-10T05:40:00.000-08:00</published><updated>2011-03-10T05:40:15.505-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etraxis'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='сервис'/><category scheme='http://www.blogger.com/atom/ns#' term='saas'/><category scheme='http://www.blogger.com/atom/ns#' term='clodo'/><category scheme='http://www.blogger.com/atom/ns#' term='услуга'/><title type='text'>eTraxis теперь доступен в облаке</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего&lt;br /&gt;&lt;br /&gt;Постоянные читатели бложика наверное заметили, что я часто упоминаю систему отслеживания запросов на изменения &lt;a href="http://code.google.com/p/etraxis/"&gt;eTraxis&lt;/a&gt;. Как я уже упоминал, я принимал небольшое участие в этом проекте и до сих пор активно слежу за его &lt;a href="http://scm-notes.blogspot.com/2010/10/etraxis-3.html"&gt;развитием&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Собственно, хотелось поделиться радостной новостью - eTraxis теперь доступен не только в виде исходников для самостоятельного развертывания у себя в команде. Теперь это ещё и сервис, работающий по модели SaaS -&amp;nbsp;&lt;a href="https://www.etraxis.com/"&gt;https://www.etraxis.com/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Любой желающий может зарегистрироваться и получить свой поддомен (т.е. проект), где он получит возможность создавать до двух шаблонов своего workflow и до 5 пользователей. Специально для сервиса была переработана &lt;a href="https://www.etraxis.com/docs.php"&gt;документация&lt;/a&gt; - теперь это несколько онлайн-презентаций с рассказами о том, как надо работать с системой. Можно заимпортировать &lt;a href="http://etraxis.googlecode.com/svn/bin/bug.xml"&gt;готовый шаблон&lt;/a&gt; и начать работу.&lt;br /&gt;&lt;br /&gt;Сервер работает "&lt;a href="http://www.clodo.ru/"&gt;в облаке&lt;/a&gt;", отсюда и возможность создания поддоменов, и автоматического развёртывания проектов для новых пользователей. Описанные ограничения по шаблонам и пользователям - следствие бесплатности услуги.&lt;br /&gt;&lt;br /&gt;Да, кстати, регистрация и использование - бесплатны. Что, конечно же, не мешает ткнуть благодарным пользователям на кнопочку Donate и перечислить малую толику :)&lt;br /&gt;&lt;br /&gt;В общем - не сидим, регаемся и &lt;a href="https://www.etraxis.com/"&gt;начинаем работу&lt;/a&gt;. :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-243640398658914906?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/243640398658914906/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/03/etraxis-cloud-saas.html#comment-form' title='Комментарии: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/243640398658914906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/243640398658914906'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/03/etraxis-cloud-saas.html' title='eTraxis теперь доступен в облаке'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-4921023619097505272</id><published>2011-03-01T04:23:00.000-08:00</published><updated>2011-03-01T04:25:13.238-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><title type='text'>SCM - в массы, или Книжка, которую пишут в github</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;На Хабре сегодня зацепил взгляд заголовок, содержащий слова "литературное произведение, создаваемое с помощью GitHub". В мозгу сработало ключевое слово - и вот я уже читаю о том, как &lt;a href="http://habrahabr.ru/blogs/Git/114676/"&gt;на github энтузиаст начал писать книжку&lt;/a&gt;&amp;nbsp;научно-фантастического уклона.&lt;br /&gt;&lt;br /&gt;По итогу порадовал сам факт, что контроль версий начал выходить за рамки традиционного применения. Фраза "разветвление сюжета" заиграла новыми красками :)&lt;br /&gt;&lt;br /&gt;Конечно, инициатору ещё предстоит столкнуться с массой проблем, порождённых таким демократическим подходом. Чего будут стоить "форки" сюжета, заe которыми будет трудно уследить даже дотошному читателю. Однако - может получиться занятно.&lt;br /&gt;&lt;br /&gt;Начинаю ждать кино, выложенное в Mercurial на Google Code через YouTube ;)&lt;br /&gt;&lt;br /&gt;P.S. И почему мне упорно вспоминается "t" Пелевина? :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-4921023619097505272?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/4921023619097505272/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/03/scm-github.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/4921023619097505272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/4921023619097505272'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/03/scm-github.html' title='SCM - в массы, или Книжка, которую пишут в github'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-8607526616968447673</id><published>2011-02-13T15:57:00.000-08:00</published><updated>2011-02-13T15:57:56.047-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='управление'/><category scheme='http://www.blogger.com/atom/ns#' term='caissonian'/><category scheme='http://www.blogger.com/atom/ns#' term='изменения'/><category scheme='http://www.blogger.com/atom/ns#' term='openquality'/><category scheme='http://www.blogger.com/atom/ns#' term='качество'/><title type='text'>Управление изменениями и кессонная болезнь проектов</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего!&lt;br /&gt;&lt;br /&gt;Давно зрела мысль написать что-нибудь разумное, доброе, вечное. Бойся своих желаний!&lt;br /&gt;&lt;br /&gt;Итак, для сайта OpenQuality.ru написал программную статью&amp;nbsp;&lt;a href="http://experience.openquality.ru/software-configuration-management/"&gt;Управление изменениями и кессонная болезнь проектов&lt;/a&gt;. Получилось много и подробно - спасибо редактору сайта Юрию за правильно поставленные вопросы и предложения. Статья, как можно понять из названия - про то, как управлять изменениями в проекте и как изменяющийся масштаб проекта влечет за собой то, что у людей принято называть декомпрессионной болезнью (кессонкой).&lt;br /&gt;&lt;br /&gt;В общем, читаем и высказываемся &lt;a href="http://experience.openquality.ru/software-configuration-management/#respond"&gt;в комментариях&lt;/a&gt; к статье.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-8607526616968447673?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/8607526616968447673/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/02/project-caissonian-sickness.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8607526616968447673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8607526616968447673'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/02/project-caissonian-sickness.html' title='Управление изменениями и кессонная болезнь проектов'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-6426687254015121145</id><published>2011-02-12T04:03:00.000-08:00</published><updated>2011-02-12T04:28:54.258-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web development'/><category scheme='http://www.blogger.com/atom/ns#' term='manage'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='dvcs'/><category scheme='http://www.blogger.com/atom/ns#' term='распределенный'/><title type='text'>Используем git для управления сайтом</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Я достаточно давно работаю в отрасли разработки приложений для веба, поэтому всегда с двойным интересом читаю материалы о применении SCM для веб-разработки. Поэтому этот материал особенно порадовал: &lt;a href="http://toroid.org/ams/git-website-howto"&gt;Using Git to manage a web site&lt;/a&gt;, что означает примерно "Как с помощью гита управлять веб-сайтом".&lt;br /&gt;&lt;br /&gt;Идея, в общем-то, не нова. Берём git, создаем репо у себя и репо на сервере, где лежит сайт. Далее с помощью напильника и механизма хуков (hooks) настраиваем, чтобы при получении очередной дельты через push, локальная копия исходников сайта обновлялась из репозитория. Разработчик меняет код, делает push на сервер, там срабатывает хук, который разворачивает новые исходники в ту директорию, где у вашего сайта DocumentRoot.&lt;br /&gt;&lt;br /&gt;Думаю, что-то аналогичное можно придумать и для Mercurial.&lt;br /&gt;&lt;br /&gt;Для тех, кто использует распределённые системы контроля и пишет под веб, это хорошее решение.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-6426687254015121145?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/6426687254015121145/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/02/using-git-manage-web-site.html#comment-form' title='Комментарии: 21'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6426687254015121145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6426687254015121145'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/02/using-git-manage-web-site.html' title='Используем git для управления сайтом'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-6738840988942309445</id><published>2011-02-05T04:50:00.000-08:00</published><updated>2011-07-16T05:38:10.633-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google code'/><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='Bazaar'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='dvcs'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='контроль версий'/><category scheme='http://www.blogger.com/atom/ns#' term='Hg'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='распределенный'/><title type='text'>Как выбирали между Mercurial и git для Google Code</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Некоторое время назад наткнулся на заметку в справке Google Code, посвященную тому, как выбирали распределённую систему контроля версий для этого проекта. Ссылка давно ждала удобного повода, но его не нашлось, так что лучше поздно, чем никогда.&lt;br /&gt;&lt;br /&gt;С самого начала своей работы проект Google Code поддерживал только Subversion. Надо полагать, в виду его распространённости - ведь после заката CVS именно он стал стандартом де-факто среди бесплатных систем контроля версий. Проблемой выбора распределённой VCS команда озадачилась в 2008 году, в результате чего появилось вот это эссэ: &lt;a href="http://code.google.com/p/support/wiki/DVCSAnalysis"&gt;Analysis of Git and Mercurial&lt;/a&gt;. Для тех, кто до сих пор поленился хоть немного изучить английский, есть &lt;a href="http://translated.by/you/analysis-of-git-and-mercurial/into-ru/"&gt;народный перевод&lt;/a&gt;. Несмотря на мелкие неточности и стилистические ошибки, вполне можно понять, о чём речь.&lt;br /&gt;&lt;br /&gt;Как видно на сайте Гугл.Кода, выбор пал на Ртутного. Причины - в тексте. Также встречал примерно следующее мнение - мол, приверженцы Subversion обитают на SourceForge, фанаты git - на github, ну и Гугл решил в чужой огород не лезть и взял под крыло Hg. Почему бы нет. К тому же, Python, на котором написана бОльшая часть Hg, весьма любим в компании.&lt;br /&gt;&lt;br /&gt;P.S. Первый же коммент к оригинальному тексту вопрошает - почему Bazaar даже не рассматривали? Думаю, в первую очередь из-за его меньшей распространённости. Однако, прочитав очередной &lt;a href="http://piranha.org.ua/blog/2011/01/24/bzr-hate-and-hate/"&gt;Bazaar hate speech&lt;/a&gt;, подумал, что не только поэтому :) Хотя это субъективное мнение, конечно.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;: git таки появился среди поддерживаемых систем, не прошло и полгода:&amp;nbsp;&lt;a href="http://code.google.com/p/support/wiki/ChoosingAVersionControlSystem"&gt;http://code.google.com/p/support/wiki/ChoosingAVersionControlSystem&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-6738840988942309445?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/6738840988942309445/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/02/mercurial-git-google-code.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6738840988942309445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6738840988942309445'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/02/mercurial-git-google-code.html' title='Как выбирали между Mercurial и git для Google Code'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-7129711442257546290</id><published>2011-01-18T04:36:00.000-08:00</published><updated>2011-01-18T04:41:18.164-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='amazom.com'/><category scheme='http://www.blogger.com/atom/ns#' term='шаблоны'/><category scheme='http://www.blogger.com/atom/ns#' term='plastic scm'/><category scheme='http://www.blogger.com/atom/ns#' term='берчук'/><category scheme='http://www.blogger.com/atom/ns#' term='appleton'/><category scheme='http://www.blogger.com/atom/ns#' term='эпплтон'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='berczuk'/><category scheme='http://www.blogger.com/atom/ns#' term='обзор'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Книги // Software Configuration Management Patterns</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Атака на книжную полку продолжается. На этот раз под раздачу попала ещё одна книжку &lt;a href="http://scm-notes.blogspot.com/2010/10/books-about-configuration-management.html"&gt;из числа тех, что выбрал себе&lt;/a&gt; для детального ознакомления. Называется &lt;a href="http://www.amazon.com/Software-Configuration-Management-Patterns-Integration/dp/0201741172"&gt;Software Configuration Management Patterns&lt;/a&gt;: Effective Teamwork, Practical Integration, авторы - Стёпа Берчук (Stephen P. Berczuk) и Брэд Эпплтон (Brad Appleton). На русский можно перевести как "&lt;b&gt;Шаблоны управления конфигурацией ПО&lt;/b&gt;: Эффективная работа команды, практическая интеграция."&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_JEtA8AHBXJ4/TTWKUrS0E5I/AAAAAAAAAY0/wcGYAgG2-sM/s1600/scmpatterns.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_JEtA8AHBXJ4/TTWKUrS0E5I/AAAAAAAAAY0/wcGYAgG2-sM/s1600/scmpatterns.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Тема шаблонов в разработке софта прорабатывается уже достаточно давно. Причем, как выяснилось, начало своё она берет из архитектуры. Сергей Тепляков не так давно рассказал на &lt;a href="http://www.rsdn.ru/article/patterns/PatternsSuccessStory.xml"&gt;страницах RSDN Magazine&lt;/a&gt; об истоках этого направления, почитайте (после этой заметки, конечно же).&lt;br /&gt;&lt;br /&gt;Как и в любой другой области знаний, в SCM есть свои устоявшиеся практики, методики и просто удачные способы сделать работу эффективной. Соответственно, кто-то должен был уже упорядочить всё это в одном источнике. Авторы же имеют большой опыт не только разработки ПО, но и управления конфигурациями, так что именно они и взялись за задачу. &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Вся книга поделена на вводную часть, 2 основных раздела и пару приложений.&lt;br /&gt;&lt;br /&gt;Введение и весь 1-й раздел вкратце напоминают читателю о том, что такое Software Configuration Management, а также что такое шаблоны. Что примечательно - здесь не просто ведется повествование от первого лица, а приводятся цитаты из множества других работ. Авторы, достаточно часто публикуются в журналах и участвуют конференциях. Поэтому нет недостатка как в ссылках на себя самих, так и на других авторитетов отрасли. В общем, нормальный научных подход, сразу видно, что не просто взято из головы, но ещё и как минимум обдумало другими людьми.&lt;br /&gt;&lt;br /&gt;Основа книги - это, конечно же, описание самих шаблонов. Каждый шаблон дается в одинаковом виде - описывается проблемная ситуация и задаются вопросы о дальнейших действиях, затем дается развернутый ответ. После чего отмечаются задачи, которые связаны с описанным шаблоном, но ещё не решены (Unresolved issues), а также даются ссылки на литературу, где можно прочитать про описанные техники более подробно (Further reading). В общем, правильный инженерный подход.&lt;br /&gt;&lt;br /&gt;Всего описано &lt;b&gt;16 шаблонов&lt;/b&gt;, которые авторы условно делят на 2 множества.&lt;br /&gt;Во-первых это &lt;b&gt;Codeline-related patterns&lt;/b&gt;, т.е. те шаблоны, которые показывают, как работать с кодом. Сюда относятся:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Mainline &lt;/i&gt;- использование главной ветки для выдачи стабильных релизов и ханения только стабильноо кода;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Active development line&lt;/i&gt; - разработка "на транке" с минимальным ветвлением и активной работой;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Private versions&lt;/i&gt; - ветвление для нужд разработчика, ветки используются для отладки ипромежуточных результатов;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Release line&lt;/i&gt; - ветвление с целью формирование новых релизов (1 новый релиз = 1 ветка);&lt;/li&gt;&lt;li&gt;&lt;i&gt;Release-prep code line&lt;/i&gt; - то же, что release line, только ветвление происходит непосредственно перед выпуском для стабилизации работы;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Task branch&lt;/i&gt; - &lt;a href="http://scm-notes.blogspot.com/2010/09/branch-per-task-workflow-explained.html"&gt;ветка-на-задачу&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Codeline policy&lt;/i&gt; - внедрение и поддержание политик, тесно связанных с коммитом кода и его (автоматической) проверкой;&lt;/li&gt;&lt;/ul&gt;Второе множество - это &lt;b&gt;Workspace-related patterns&lt;/b&gt;, куда идут:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Private workspace&lt;/i&gt; - о необходимости выделять разработчику рабочего пространства с теми версиями кода и настройками среды, которые нужны для работы;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Repository &lt;/i&gt;- хранилище, в котором хранятся не только версии кода, но и инструменты, необходимые для работы и создания релизов;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Private system build&lt;/i&gt; - о необходимости дать возможность разработчику отстраивать систему без пересечения с остальными участниками проекта;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Integration build&lt;/i&gt; - интеграционные билды для объединения работы участников;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Third-party codeline&lt;/i&gt; - о том, как организовать версионность сторонних зависимостей;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Task-level commit&lt;/i&gt; - вариация на тему task branch;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Smoke test&lt;/i&gt; - об автоматизированном тестировании при каждом коммите на главную или активную ветку;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Unit test&lt;/i&gt; - одноименной технике;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Regression test&lt;/i&gt; - о необходимости проводить регрессионное тестирование перед сдачей дельты на интеграцию&lt;/li&gt;&lt;/ul&gt;В целом - базовые практики, о которым многие уже слышали или пробовали.&lt;br /&gt;&lt;br /&gt;В оставшихся приложениях даются краткие описания полезных ресурсов по вопросам SCM и основных инструментальных средств (впрочем, тут сведения несколько устарели).&lt;br /&gt;&lt;br /&gt;Общий итог - хочется больше шаблонов, однако уже в данном виде это - хороший справочник по правильным техникам, надо брать.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-7129711442257546290?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/7129711442257546290/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/01/scm-patterns.html#comment-form' title='Комментарии: 10'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7129711442257546290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7129711442257546290'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/01/scm-patterns.html' title='Книги // Software Configuration Management Patterns'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TTWKUrS0E5I/AAAAAAAAAY0/wcGYAgG2-sM/s72-c/scmpatterns.jpg' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-9154779042832975180</id><published>2011-01-05T01:56:00.000-08:00</published><updated>2011-01-18T00:05:03.604-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='mario'/><category scheme='http://www.blogger.com/atom/ns#' term='обзор'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon.com'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='moreira'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><category scheme='http://www.blogger.com/atom/ns#' term='марио'/><category scheme='http://www.blogger.com/atom/ns#' term='aiello'/><category scheme='http://www.blogger.com/atom/ns#' term='морейра'/><category scheme='http://www.blogger.com/atom/ns#' term='adapting'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration management'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='применение'/><category scheme='http://www.blogger.com/atom/ns#' term='айелло'/><title type='text'>Книги // Adapting Configuration Management for Agile Teams</title><content type='html'>&lt;div style="text-align: right;"&gt;&lt;i&gt;Cigarettes and coffee, man, that's a combination.&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;i&gt;(c) "Coffee and Cigarettes", Jim Jarmush&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;Сам  я не курящий, однако для книжки, про которую пойдет речь, это вполне  подходящий эпиграф. Потому как книжка - про соединение двух очень  связанных областей - это гибкие методологии разработки (a.k.a. Agile) и  управление конфигурацией (a.k.a. SCM).&lt;br /&gt;&lt;br /&gt;Однако, обо всём по порядку. Не так давно я делал &lt;a href="http://scm-notes.blogspot.com/2010/10/books-about-configuration-management.html"&gt;обзор книг по SCM&lt;/a&gt;. Заинтересовавшие книжки приобрёл и начал планомерно с ними знакомиться. В первую очередь ознакомился с трудом Боба Айелло &lt;a href="http://scm-notes.blogspot.com/2010/12/configuration-management-best-practices.html"&gt;Configuration Management Best Practices&lt;/a&gt;.  Книжка была стоящей, как и ожидалось. Боб, как выяснилось, немного  знает русский (работал волонтёром в ER и часто бывал на Брайтон Бич ;) )  и с помощью знакомого русофила ознакомился с отзывом, после чего сильно  благодарил.&lt;br /&gt;&lt;br /&gt;Следующей в прочтение попала книга&amp;nbsp;&lt;a href="http://www.amazon.com/dp/0470746637"&gt;Adapting Configuration Management for Agile Teams: Balancing Sustainability and Speed&lt;/a&gt; за авторством Марио Морейры (Mario E. Moreira).  Название можно перевести как "&lt;b&gt;Применение SCM в командах с гибкими методиками разработки: в равновесии между устойчивостью и скоростью&lt;/b&gt;". Что по-русски, что по-английски - одинаково громоздко, однако смысл понятен.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_JEtA8AHBXJ4/TSQlVLMLKWI/AAAAAAAAAYw/cractOPsnJQ/s1600/Adapting-cm.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_JEtA8AHBXJ4/TSQlVLMLKWI/AAAAAAAAAYw/cractOPsnJQ/s320/Adapting-cm.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Перед  прочтением опасался, что книжка будет похожа на героев старого анекдота  про морскую свинку, однако опасения были напрасными.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;В первой главе &lt;b&gt;Introduction: Racing with Confidence&lt;/b&gt;  автор заранее говорит - кому вообще стоит читать данную книгу. Как и  следовало ожидать - читать можно всем. И тем, кто знаком с agile, но  хочет узнать больше про SCM, и наоборот. Много "воды", однако - надо же было с чего-то начать книгу. :) Далее идёт ознакомление с основами как SCM, так и agile.&lt;br /&gt;&lt;br /&gt;Глава &lt;b&gt;CM Primer&lt;/b&gt;  с толком рассказывает, что же такое управление конфигурацией. Причем основы изложены правильно. Сначала говорится о 4 основных направлениях ответственности - identification, control, audit, report. А затем - об основных практиках, таких как контроль версий,&amp;nbsp; багтрекинг, управление отстройкой и  многом другом. После этой главы должно появиться понимание - что из себя  представляет SCM и какова его роль. С точки зрения СМ-инженера - изложено толково.&lt;br /&gt;&lt;br /&gt;Следующая глава - &lt;b&gt;Agile Primer&lt;/b&gt; -  рассказывает о том, что вы давно хотели узнать про Agile, но всё недосуг  было прочитать. Причем упор делается больше на идеях и духе, хотя о конкретных практиках также рассказывается. Для начала цитируется Agile Manifesto - чтобы читатель проникся идеями и ценностями. Далее идет рассказ о популярных методах, например, Scrum и XP. А затем, опять же, немало уделяется внимания именно роли личности и персональным коммуникациям - приводятся психотипы участников agile-движения (несколько - от innovator и champion до deviever и denier), их роли и общий настрой (mindset). В общем, познавательно. Я вот лично не работал в Agile-командах, однако для себя получил изрядную картину  того, что же это такое.&lt;br /&gt;&lt;br /&gt;Далее в главе &lt;b&gt;How CM and Agile Values Work Together&lt;/b&gt; делается первая попытка свести вместе гибкие методики и SCM и показать, что они отлично уживаются и дополняют друг друга. А именно - берётся поочередно каждая практика SCM - будь то контроль версий, выпуск релизов или планирование - и рассматривается с точки зрения Agile. Рассуждение идёт достаточно прагматичное и не предвзятое - практик Agile примеряет "на себя" все практики SCM.&lt;br /&gt;&lt;br /&gt;Затем глава &lt;b&gt;Approaching Infrastructure for Agile&lt;/b&gt; описывает как выстраивается инфраструктура под гибкую разработку. В основном, описывается два подхода - когда всё выстраивается заранее (envisioning) и когда минимальный набор средств на старте проекта постепенно перерабатывается под нужны каждой итерации (refactoring). Также немало рассказывается о выборе между двумя крайностями: создание инфраструктуры самостоятельно, или же размещение/покупка решений "в облаке" - это направление в последние годы набирает обороты.&lt;br /&gt;&lt;br /&gt;Опсле чего глава &lt;b&gt;Approaching the CM Implementation for Agile &lt;/b&gt;продолжает развивать нчатую мысль и показывает как практики SCM будут внедрятся в работу agile-команды. Аналогично предыдущей главы рассматриваются подходы envisioning vs. refactoring, после чего читателя активно убеждают в необходимости максимальной автоматизации CM-деятельности, что очень правильно.&lt;br /&gt;&lt;br /&gt;Наиболее существенная часть книги - это глава &lt;b&gt;Adapting CM Practices for Agile&lt;/b&gt;,  где подробно описывается, как практики SCM адаптируются к работе  команды, исповедующей Agile. Берется какая-то сторона работы гибких  методологий, и показывается - как CM увязывается с Agile в описанном случае. Сюда  входит и continuous integration, планирование, рефакторинг, test-driven development, парное программирование, управление изменениями, багтрекинг и некоторые другие аспекты. Всё очень подробно и, опять же, прагматично. Автор спокойно может утверждать, что какие-то традиционные практики вроде планирования или baselining могут просто не понадобиться при грамотной работе "гибкой" команды. Причем описывает это обоснованно, с точки зрения здравого смысла и духа гибких методик.&lt;br /&gt;&lt;br /&gt;Следующую главу &lt;b&gt;CM Tool as a Strategic Agile Partner&lt;/b&gt; предоставил Деймон Пул (Damon Poole). Он делает упор на выборе инструментария под "гибкие" проекты описывающие выбор инструментария как для CM, так и для всего процесса разработки. Причем берет действительно нужные параметры, такие как производительность, наличие репликации или распределенного механизма, поддержка веток и т.п. Неплохая глава, в общем.&lt;br /&gt;&lt;br /&gt;Следующая за ней&lt;b&gt; Evaluating Tools Suited for Agile&lt;/b&gt;&amp;nbsp;продолжает разговор о выборе инструментов, причем упор уже далается на том, как правильно построить evaluation, т.е. оценку выбираемых инструментов. Мало, но неплохо.&lt;br /&gt;&lt;br /&gt;Закрывает книгу глава, предоставленная Бобом Айелло - &lt;b&gt;Using CM Standards and Frameworks to Support Agile &lt;/b&gt;- которая во многом повторяет одноименную главу в его собственной книге, на которую ссылался в начале.&lt;br /&gt;&lt;br /&gt;На сайте издательства можно прочитать детальный &lt;a href="http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0470746637,descCd-tableOfContents.html"&gt;список глав и разделов&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Кому будет полезна книга?&lt;br /&gt;&lt;br /&gt;Для  разработчиков, исповедующих Agile, будет полезно ещё раз посмотреть на  то, какие практики они используют, и лишний раз посмотреть - можно ли  как-то улучшить свою работу, т.е. сделать рефакторинг своих процессов. Наверняка найдется что-нибудь новое.&lt;br /&gt;&lt;br /&gt;Для  тех, кто занимается SCM или какой-либо из его сторон, будет также  полезно познакомится с тем, чем сейчас живёт чуть ли не половина всей  отрасли. Ведь Agile сейчас на подъёме, а значит, надо иметь хорошее  представление о том, что происходит вокруг. Кроме того, многие канонические вещи, вроде ветвления, обсуждаются в новом свете, что заставляет задуматься об их исключительной необходимости в определенных условиях. Короче, полезно иногда взглянуть по-новому на знакомые вещи.&lt;br /&gt;&lt;br /&gt;Общий итог - надо брать.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;: &lt;a href="http://www.rsdn.ru/res/book/prog/cm4agile.xml"&gt;обновленную аннотацию&lt;/a&gt; опубликовали на RSDN.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-9154779042832975180?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/9154779042832975180/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2011/01/adapting-cm-for-agile-teams.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/9154779042832975180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/9154779042832975180'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2011/01/adapting-cm-for-agile-teams.html' title='Книги // Adapting Configuration Management for Agile Teams'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JEtA8AHBXJ4/TSQlVLMLKWI/AAAAAAAAAYw/cractOPsnJQ/s72-c/Adapting-cm.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-6004278999655902064</id><published>2010-12-12T16:34:00.000-08:00</published><updated>2011-02-04T02:54:14.805-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='sachs'/><category scheme='http://www.blogger.com/atom/ns#' term='aiello'/><category scheme='http://www.blogger.com/atom/ns#' term='rsdn'/><category scheme='http://www.blogger.com/atom/ns#' term='practical methods'/><category scheme='http://www.blogger.com/atom/ns#' term='обзор'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon.com'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration management'/><title type='text'>Обзор книги Configuration Management Best Practices</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Как уже знают постоянные читатели бложика, не так давно я озадачился поиском книжек по управлению конфигурацией ПО. В результате получился &lt;a href="http://scm-notes.blogspot.com/2010/10/books-about-configuration-management.html"&gt;обзор литературы по SCM&lt;/a&gt;, преимущественно англоязычной. Финалистами стали 3 книжки, которые было решено приобрести и изучить. И первой из них - как по "интересности", так и по авторитетности лично для меня - стала книга &lt;span style="color: black;"&gt;&lt;a href="http://www.amazon.com/dp/0321685865"&gt;&lt;b&gt;Configuration Management Best Practices&lt;/b&gt;: Practical Methods that Work in the Real World&lt;/a&gt;, написанная Бобом Айелло (Robert Aiello) в соавторстве с Лесли Сакс (Leslie Sachs). На русский название можно перевести как "&lt;b&gt;Лучшие практики управления конфигурацией&lt;/b&gt;: практические методы, работающие в реальном мире".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_JEtA8AHBXJ4/TRCVTAeMjcI/AAAAAAAAAYU/M7o-xc1GKgM/s1600/cmbestpractices.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_JEtA8AHBXJ4/TRCVTAeMjcI/AAAAAAAAAYU/M7o-xc1GKgM/s1600/cmbestpractices.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://ecx.images-amazon.com/images/I/51lXWYL6lcL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Пока заказывал и дожидался - успел прочитать в электронном виде (пиратство - страшное зло!), однако потраченных денег не жалею - труд автора должен быть оплачен. Да и книжка весьма приятна внешне и внутренне. О чём же она?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Книга поделена на 4 части:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;b&gt;The Core CM Best Practices Framework&lt;/b&gt;. Основа, начало начал. &lt;/span&gt;&lt;span style="color: black;"&gt;Рассказывается, &lt;/span&gt;&lt;span style="color: black;"&gt;что такое SCM, зачем нужен, из каких базовых практик состоит - коротко и по делу. Интересно, что контроль версий здесь обозначается более общим термином source code management, т.е. управление исходным кодом. Сделано это намеренно, т.к. автор считает, что контроль версий (так традиционно называют эту область) - это лишь одна из функций управления кодом. Немало рассказано и про управление изменениями (&lt;/span&gt;&lt;span style="color: black;"&gt;change control). Опять же, термин более общий, чем просто традиционное "отслеживание ошибок", потому что речь идет именно о высокоуровневых подходах к вопросу. И, к слову, про эти самые системы отслеживания ошибок - ни слова :), только про запросы на изменения продукта. Немало уделяется и выпуску продукта - а именно выпуску релизов и развертыванию, вместе с контролем зависимостей.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Architecture and Hardware CM&lt;/b&gt;. Здесь описывается два отдельных аспекта работы SCM. Во-первых, вводится предположение о том, что разработка архитектуры проекта может быть основана на управлении конфигурацией этого самого проекта. Смелое и странное на первых взгляд предположение, однако изложено интересно.&lt;br /&gt;Во-вторых, &lt;span style="color: black;"&gt;поднимается вопрос об управлении конфигурацией аппаратного обеспечения (hardware configuration management). Для разработки систем, где задействованы или разрабатываются аппаратные средства - вещь крайне нужная. Описаны только основы организации HCM, поскольку в каждом случае реализация будет различной.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;b&gt;The People Side of CM&lt;/b&gt;. Весь раздел - по сути, рассказ о том, как логичные правила и процедуры сталкиваются с нелогичной и противоречивой человеческой природой. Тут и прагматичное "Rightsizing Your processes" (как сделать процессы не слишком громоздкими), и полное борьбы "Overcoming Resistance to Change", и всепрощающее "Learning From Mistakes That I Have Made". Здесь же - глава, написанная психологом-соавтором Лесли, "Personality and CM: A Psychologist Looks at the Workplace". Названия говорят сами за себя, весь раздел - он про людей и этим всё сказано.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;b&gt;Compliance, Standards, and Frameworks&lt;/b&gt;. Как следует из названия, подводится опыт изучения и использования различных стандартов и шаблонов процессов. Ведь сама область SCM существует уже три или четыре десятка лет, поэтому здесь давно уже есть стандартизованные подходы. Про них и ведется рассказ.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;b&gt;Об авторе&lt;/b&gt;. Боб Айелло работает в области SCM уже 25 лет (четверть века!). За это время переработал в нескольких компаниях, поучаствовал в куче проектов и &lt;/span&gt;&lt;span style="color: black;"&gt;проконсультировал уйму народу&lt;/span&gt;&lt;span style="color: black;"&gt;. В настоящий момент, помимо консультаций, является замруководителя рабочей группы стандарта IEEE 828 по Планированию Управления Конфигурацией. В свободное время - главный редактор CM Crossroads - центрального ресурса по вопросам SCM. Иными словами - игрок высшей лиги, человек и пароход.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;b&gt;О книжке в целом&lt;/b&gt;. Если посмотреть в целом, то книга - она про людей, как ни странно. Все описанные подходы описываются с точки зрения здравого смысла и повседневной работы простых инженеров. Много личных примеров, где особенно ценен отрицательный опыт.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Чем ещё ценна - это тем, что в одном источнике собрано то, что раньше можно было прочитать или в стандартах (сухим формальным языком), или в отдельным источниках, где нет общей "картины мира". Эта книжка - приятное исключение. Выпусти Боб книжку пораньше - может быть, и не было бы ни моей серии статей, ни этого бложика тоже - за ненадобностью :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Кому и зачем нужна книга?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Если пишешь код или тестируешь - будет просто нелишним узнать, что происходит вокруг, и почему менеджеры вдруг приводят какого-то человека, который начинает объяснять как надо правильно жить.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Если работаешь релиз-инженером или СМ-инженером - читать обязательно, более общего взгляда на предметную область просто не видел. Цельная картина мира в голове по прочтении - обеспечена. Понимание того, куда надо идти дальше, проявится ещё более четко.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Если руководишь проектом или являешься техлидом - крайне рекомендую прочитать, хотя бы потому, что есть много пересечений с общепроектными видами деятельности. Да и вообще, СМ - это область базовая, а потому именно она создает много узких мест, bottleneck-ов - так что для их преодоления надо знать с какого боку подойти.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;В общем, нужная книжка, &lt;span style="color: black;"&gt;надо брать.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;b&gt;Update&lt;/b&gt;: На RSDN выложили &lt;a href="http://www.rsdn.ru/res/book/prog/cmbestpractices.xml"&gt;расширенную версию&lt;/a&gt; этого обзора.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-6004278999655902064?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/6004278999655902064/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/12/configuration-management-best-practices.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6004278999655902064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6004278999655902064'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/12/configuration-management-best-practices.html' title='Обзор книги Configuration Management Best Practices'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JEtA8AHBXJ4/TRCVTAeMjcI/AAAAAAAAAYU/M7o-xc1GKgM/s72-c/cmbestpractices.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-7131373755542930489</id><published>2010-12-10T05:48:00.000-08:00</published><updated>2010-12-10T05:48:38.040-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plastic scm'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='dvcs'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='контроль версий'/><category scheme='http://www.blogger.com/atom/ns#' term='cvcs'/><category scheme='http://www.blogger.com/atom/ns#' term='Codice'/><title type='text'>Как работают распределенные системы контроля версий</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;В последнее время у меня как-то много стало появляться заметок с упоминанием Codice Software. В первую очередь, это связано с тем, что я делал &lt;a href="http://scm-notes.blogspot.com/2010/04/plastic-scm.html"&gt;обзор Plastic SCM&lt;/a&gt;, а также рассказывал про &lt;a href="http://scm-notes.blogspot.com/2010/11/plastic-scm-community-edition.html"&gt;Community Edition&lt;/a&gt; этого продукта. Да, понравился мне Пластик, чего у там. К тому же Пабло, один из основателей компании, постоянно публикует разные интересные материалы. Тут и &lt;a href="http://scm-notes.blogspot.com/2010/11/version-control-timeline.html"&gt;история систем контроля версий&lt;/a&gt;, и рассказ про &lt;a href="http://scm-notes.blogspot.com/2010/09/branch-per-task-workflow-explained.html"&gt;подход "ветка-на-задачу"&lt;/a&gt;, перевод которого я сделал. В общем, compañero Pablo времени не теряет и всячески популяризирует своё детище и контроль версий вообще.&lt;br /&gt;&lt;br /&gt;Ну а на днях он продолжил правое дело просвещения и опубликовал очередную заметку: &lt;a href="http://codicesoftware.blogspot.com/2010/12/dvcs-for-everyone.html"&gt;DVCS for Everyone&lt;/a&gt;, что означает примерно "Распределенные системы контроля версий доходчиво для всех".&lt;br /&gt;&lt;br /&gt;Что интересного? Простым языком объясняется, что такое централизованные системы контроля версий, что такое распределенные системы, какие бывают их виды и чем они друг от друга отличаются. Есть даже объяснение работы mutsi-site, да ещё и с упоминанием ClearCase, за что большой респект. Как обычно - всё понятно, в усиление дается несколько доходчивых картинок, юмора немного - в итоге читается легко и непринужденно.&lt;br /&gt;&lt;br /&gt;В общем, переводить не вижу смысла, читайте как есть.&lt;br /&gt;&lt;br /&gt;Ну и картинка с иконкой github для привлечения внимания :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_z6qpykplUvI/TP6sUEvnvwI/AAAAAAAAA_M/E32mOms3Bc0/s1600/02distributed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="195" src="http://4.bp.blogspot.com/_z6qpykplUvI/TP6sUEvnvwI/AAAAAAAAA_M/E32mOms3Bc0/s320/02distributed.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-7131373755542930489?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/7131373755542930489/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/12/dvcs-for-everyone.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7131373755542930489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7131373755542930489'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/12/dvcs-for-everyone.html' title='Как работают распределенные системы контроля версий'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_z6qpykplUvI/TP6sUEvnvwI/AAAAAAAAA_M/E32mOms3Bc0/s72-c/02distributed.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-8170409392947288411</id><published>2010-11-15T18:47:00.000-08:00</published><updated>2010-11-15T19:17:09.223-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='контроль версий'/><category scheme='http://www.blogger.com/atom/ns#' term='история'/><category scheme='http://www.blogger.com/atom/ns#' term='history'/><title type='text'>История развития систем контроля версий</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Пабло из Codice Software порадовал экскурсом в &lt;a href="http://codicesoftware.blogspot.com/2010/11/version-control-timeline.html"&gt;историю систем контроля версий&lt;/a&gt;. Написано живенько, с юмором, очень приятно читать.&lt;br /&gt;Да и главная картинка порадовала, здесь на шкалу времени он положил для сравнения мобильные телефоны, используемые в то время, о котором идет речь (кликабельно):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_z6qpykplUvI/TOEcCn2EutI/AAAAAAAAA68/X9eL0yV8RsQ/s1600/scmhistory.png"&gt;&lt;img border="0" height="255" src="http://2.bp.blogspot.com/_z6qpykplUvI/TOEcCn2EutI/AAAAAAAAA68/X9eL0yV8RsQ/s400/scmhistory.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Кто интересуется предметом - рекомендую для расширения кругозора.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-8170409392947288411?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/8170409392947288411/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/11/version-control-timeline.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8170409392947288411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8170409392947288411'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/11/version-control-timeline.html' title='История развития систем контроля версий'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_z6qpykplUvI/TOEcCn2EutI/AAAAAAAAA68/X9eL0yV8RsQ/s72-c/scmhistory.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-8399040839593676897</id><published>2010-11-12T16:53:00.000-08:00</published><updated>2011-02-22T21:27:23.606-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rule-based configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='конфигурирование на базе правил'/><category scheme='http://www.blogger.com/atom/ns#' term='высокоуровневая сборка'/><category scheme='http://www.blogger.com/atom/ns#' term='variant management'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration management'/><title type='text'>Отличная статья о сборке продуктов промышленного уровня</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Добрейшего.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;В октябре в Москве проходила очередная &lt;a href="http://cee-secr.org/lang/ru-ru/"&gt;конференция "Разработка ПО"&lt;/a&gt;. Поехать не смог (да и узнал слишком поздно), однако почитать темы и тезисы докладов, послушать отзывы - такая возможность имелась. Я хоть и в &lt;a href="http://yandex.ru/yandsearch?text=%C2%EB%E0%E4%E8%E2%EE%F1%F2%EE%EA&amp;amp;lr=75"&gt;берлоге на берегу моря живу&lt;/a&gt;, но инторнеты у нас тоже имеются, да.&lt;br /&gt;&lt;br /&gt;Понятное дело, решил узнать, что нынче говорят про SCM в кругах разработчиков. Выяснилось, что почти ничего. Однако был на этом празднике жизни один доклад, который таки оправдывает существование конференции :) Более того, он сильно перекликается с одной из моих старых заметок.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;a href="http://cee-secr.org/lang/ru-ru/regular-talks/issues-and-challenges-with-industrial-strength-product-composition/"&gt;Issues and Challenges with Industrial-Strength Product Composition&lt;/a&gt; (&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;Проблемы и спорные вопросы сборки продуктов промышленного уровня&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;). Докладчики - потомки &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;суровых &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;викингов, Лар Бендикс (&lt;/span&gt;&lt;/span&gt;Lars Bendix, &lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;адъюнкт-профессор из Lund University) и Андреас Горансон (&lt;/span&gt;&lt;/span&gt;Andreas Göransson, &lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;сотрудник Sony-Ericsson).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;Что же так порадовало?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;Перевод краткого обзора от авторов:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;Одним из инструментов создания продуктовых линеек, а также продуктов,  выпускаемых в различных конфигурациях, является  компонентно-ориентированный подход. Данный подход, во-первых, допускает  немалую степень гибкости процесса создания новых продуктов, а во-вторых,  способен снизить временные и финансовые издержки. Однако у подобной  гибкости, достигаемой путем сборки продуктов из набора базовых  компонентов, существует и обратная сторона. Прежде всего, чрезвычайно  сложным оказывается сам процесс построения крупной системы из множества  мелких частей – в том числе из-за того, что каждый отдельный компонент  может существовать в различных вариациях и исправлениях. Кроме того, в  процесс разработки новых компонентов нередко вовлечен целый ряд   различных заинтересованных лиц, каждое из которых работает в  соответствии со своими потребностями и на своем уровне детализации.  Анализируя ситуацию в промышленности, мы определили набор проблем и  задач, требующих разрешения для эффективной сборки продукта.  Фактологическим и информационным хранилищем может служить разделяемая  база компонентов, а база правил (rule base) позволит пользователям  принимать решения по конфигурации на более высоком уровне, оперируя  понятиями завершенности и связности.&lt;/blockquote&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;Нашлись и тезисы, а по сути полноценная статья: &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.cs.lth.se/home/Lars_Bendix/Publications/BGSG10b/Moscow-camera-ready.pdf"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;http://www.cs.lth.se/home/Lars_Bendix/Publications/BGSG10b/Moscow-camera-ready.pdf&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt; - там много несложного английского.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;В одной старой публикации я упоминал про &lt;a href="http://scm-notes.blogspot.com/2009/09/software-configuration-management_06.html"&gt;компоненты, их версии и продуктовые линейки&lt;/a&gt;. Поскольку материал писал на основе опыта работы интегратором в Мотороле, то и проблематика была взята оттуда - из инженерии продуктов промышленного уровня.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;Докладчики также опирались на богатый работы ещё одного гиганта телекома - Sony-Ericsson и других похожих компаний. Для производителей сотовых телефонов очень важно уметь комбинировать различные фичи своих продуктов в зависимости от оператора, ценового сегмента, форм-фактора, страны продажи и многих других вещей. Отсюда давняя проблема - как обеспечить с наименьшими затратами наилучшую возможность адаптировать продукты под эти условия.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;Код всех сложных систем так или иначе разбит на модули, т.е. &lt;b&gt;компоненты&lt;/b&gt;. А значит, на уровне продукта логичнее оперировать &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;компонентами и их вариациями - &lt;b&gt;версиями и ответвлениями&lt;/b&gt;. В этом направлении работу и повели - разработали модель, учитывающую&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt; компоненты и &lt;b&gt;правила&lt;/b&gt;, по которым компоненты компонуются. Вводится понятие &lt;b&gt;базы компонентов&lt;/b&gt;, из которой &lt;/span&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;с помощью конфигуратора получается всё разнообразие продуктов, нужных конечному потребителю. Разработанную модель они и описывают. Причем работа идет на стыке SCM, проектирования и управления проектами.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;К сожалению, не указано, на какой стадии готовности и практического применения находится эта модель. Зная, что ей занимается человек из коммерческой компании, можно предположить, что работа ведется и в практическом ключе.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;Отличная статья, прочитал с удовольствием.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-8399040839593676897?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/8399040839593676897/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/11/industrial-strength-product-composition.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8399040839593676897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8399040839593676897'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/11/industrial-strength-product-composition.html' title='Отличная статья о сборке продуктов промышленного уровня'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-6988202311125776102</id><published>2010-11-02T16:10:00.000-07:00</published><updated>2010-11-04T02:27:02.404-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='Plastic'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='Codice'/><title type='text'>Вышел Plastic SCM Community Edition</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Пропустил вчера, сегодня исправляюсь.&lt;br /&gt;Codice Software, выпускающая &lt;a href="http://scm-notes.blogspot.com/2010/04/plastic-scm.html"&gt;Plastic SCM, обзор которого&lt;/a&gt; я не так давно делал, решила пойти навстречу малым командам и выпустила &lt;a href="http://codicesoftware.blogspot.com/2010/11/building-plastic-scms-community-with.html"&gt;Plastic SCM, Community Edition&lt;/a&gt;. Это всё тот же Пластик, только обновилась схема лицензирования. Команды до 15 человек могут ставить его себе безвоздмездно, то есть даром. Ну что, неплохой подарок. Стоял бы сейчас передо мной вопрос выбора системы управления исходным кодом - думаю, не удержался бы и внедрил на пробу.&lt;br /&gt;&lt;br /&gt;Кстати, как раз вчера они выпустили ещё и новую версию, &lt;a href="http://codicesoftware.blogspot.com/2010/11/plastic-307-is-out.html"&gt;Plastic 3.0.7&lt;/a&gt;, с кучей фенечек для интеграции с MS Visual Studio. Выглядит приятно.&lt;br /&gt;&lt;br /&gt;Кто не пробовал, но интересуется тематикой бложика - не побрезгуйте, зацените.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-6988202311125776102?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/6988202311125776102/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/11/plastic-scm-community-edition.html#comment-form' title='Комментарии: 19'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6988202311125776102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6988202311125776102'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/11/plastic-scm-community-edition.html' title='Вышел Plastic SCM Community Edition'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-8653316586261433643</id><published>2010-10-28T20:47:00.000-07:00</published><updated>2011-01-21T19:40:29.857-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sachs'/><category scheme='http://www.blogger.com/atom/ns#' term='aiello'/><category scheme='http://www.blogger.com/atom/ns#' term='appleton'/><category scheme='http://www.blogger.com/atom/ns#' term='ozon.ru'/><category scheme='http://www.blogger.com/atom/ns#' term='brown'/><category scheme='http://www.blogger.com/atom/ns#' term='berczuk'/><category scheme='http://www.blogger.com/atom/ns#' term='обзор'/><category scheme='http://www.blogger.com/atom/ns#' term='moreira'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon.com'/><category scheme='http://www.blogger.com/atom/ns#' term='книги'/><category scheme='http://www.blogger.com/atom/ns#' term='жажда знаний'/><title type='text'>Обзор книг по configuration management</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Речь сегодня пойдет о книгах - как российских, так и (преимущественно) зарубежных издательств. Довольно давно озадачился поиском литературы по тематике бложика. Ведь, как известно, нет ничего нового под солнцем, значит и про SCM уже много должно быть написано. Интересовали книжки, не привязанные к конкретным инструментам, т.е.  книги, которые бы дали общее понимание предмета. Ну как, например, в  моих статьях ;) только шире и глубже.&lt;br /&gt;&lt;br /&gt;Собственно, данный блог - это следствие отсутствия материалов на русском языке :). Потому как отечественные издательства, судя по ассортименту, вообще не знают что это такое - управление конфигурациями.&lt;br /&gt;Единственным исключением может служить &lt;b&gt;1 (одна) книжка&lt;/b&gt; про ClearCase: &lt;a href="http://www.ozon.ru/context/detail/id/3779533/"&gt;Стратегия управления конфигурацией программного обеспечения IBM Rational ClearCase&lt;/a&gt;. Однако, при всем моём почтении к этому продукту, надо признать, что рынок его крайне мал в нашей стране, а значит и книжка уверенно проходит мимо покупателя. К тому же, я её читал :) и там довольно мало про сам SCM и много про КлирКейс.&lt;br /&gt;Встречал ещё книжку по Subversion (перевод &lt;a href="http://oreilly.com/catalog/9780596004484/"&gt;книжки издательства O'Reilly&lt;/a&gt;), однако на том же Озоне сегодня уже найти не мог. Да и, судя по тому, что я увидел в ней, - это по сути перевод &lt;a href="http://svnbook.red-bean.com/"&gt;официальной документации&lt;/a&gt;. "Если нет разницы - зачем платить больше?" :)&lt;br /&gt;&lt;br /&gt;Остается рынок западный. "Уж там-то" - подумал я - "точно должны быть залежи литературы". Да и на CM Crossroads видел упоминание разных названий. &lt;br /&gt;&lt;br /&gt;Решил пойти по итеративному пути. &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Итерация первая&lt;/b&gt; - найти вообще все книги, где упоминается предмет, а затем отсеивать лишнее. Где искать? Конечно, на Amazon.com, б&lt;i&gt;о&lt;/i&gt;льшего ларька с книжками за границей не найти.&lt;br /&gt;Вдумчивый поиск и анализ выявил в начале порядка &lt;b&gt;20 (двух десятков) разных названий&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;- Неплохо, - подумал я, - столько СМа, как это всё за раз унести-то?&lt;br /&gt;&lt;br /&gt;Надо сделать &lt;b&gt;вторую итерацию&lt;/b&gt;. Критерии следующие: год издания - не позднее 2006-2007 года. Именно на это время приходится появление популярных распределённых систем контроля версий, а они оказывают сейчас немалое влияние как на рынок в целом, так и на практики применения инструментов. Так что нужно что-то свежее. Также важно наличие положительных отзывов читателей. &lt;br /&gt;Итог поиска - &lt;b&gt;3 (три) наименования&lt;/b&gt;. Остальные - либо старые, либо новые, но, судя по отзывам, не дающие ничего интересного читателю. Не густо, однако посмотрим, что там.&lt;br /&gt;&lt;br /&gt;Итак, &lt;b&gt;шортлист&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;a href="http://www.amazon.com/dp/0321685865"&gt;Configuration Management Best Practices: Practical Methods that Work in the Real World&lt;/a&gt; by Robert Aiello, Leslie Sachs&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Свежая книжка от основателя CM Crossroads Боба Айелло. Удалось прочитать часть чернового варианта, который он выкладывал перед выходом книги, &lt;/span&gt;можно сказать, что книжка действительно по основам. Взято от всего понемногу, каждая тема хоть немного, но освещена. На мой взгляд, есть некоторое количество слишком общей информации и повторений, однако я - не показатель :) К тому же, читал не всю книгу, да и то - черновик, так что наверняка вся книга будет чем-то более цельным. Надо брать. (&lt;i&gt;Уже взял и даже &lt;a href="http://scm-notes.blogspot.com/2010/12/configuration-management-best-practices.html"&gt;написал отзыв&lt;/a&gt;&lt;/i&gt;)&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/dp/0470746637"&gt;Adapting Configuration Management for Agile Teams: Balancing Sustainability and Speed&lt;/a&gt; by Mario E. Moreira&lt;br /&gt;Марио уже попадал в поле зрения бложика в &lt;a href="http://scm-notes.blogspot.com/2010/07/cm-journal.html"&gt;материале про CM Journal&lt;/a&gt;, так что не буду описывать ещё раз, кто это. Книжка же обещает быть сборником рецептов для наиболее динамичной части сообщества разработчиков, а именно - тех, кто практикует Agile, т.е. гибкие методологии. Тема популярная, востребованная, и я постоянно встречаю в сети её апологетов, которые одновременно интересуются и управлением конфигурациями. Так что книжка будет точно "в кассу". Надо брать. (&lt;i&gt;Уже имеется и книжка, &lt;a href="http://scm-notes.blogspot.com/2011/01/adapting-cm-for-agile-teams.html"&gt;и отзыв&lt;/a&gt;&lt;/i&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/dp/0201741172"&gt;Software Configuration Management Patterns: Effective Teamwork, Practical Integration&lt;/a&gt; by Stephen P. Berczuk, Brad Appleton, Kyle Brown&lt;br /&gt;На эту вещь идет довольно много ссылок с CM Crossroads, а авторы постоянно пишут там в свои колонки. Как видно из названия, речь идет не просто про основы, но про типовые решения. Для описания используется язык patterns language, который используется в довольно большом количестве материалов вне темы SCM, так что изложение будет весьма понятным. Надо брать. &lt;i&gt;(&lt;a href="http://scm-notes.blogspot.com/2011/01/scm-patterns.html"&gt;Отзыв&lt;/a&gt; уже написал)&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Ну прямо выездное заседание CM Crossroads получается, а не перечень литературы :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Следующая итерация &lt;/b&gt;- получить эти книжки "из-за бугра" и, собственно, прочитать :) Так что начинаю напряженно ждать. И параллельно искать электронные варианты ;) Как обычно, следите за анонсами.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;. Ссылки на написанные отзывы см. по тексту. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-8653316586261433643?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/8653316586261433643/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/10/books-about-configuration-management.html#comment-form' title='Комментарии: 24'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8653316586261433643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8653316586261433643'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/10/books-about-configuration-management.html' title='Обзор книг по configuration management'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-177467349600419451</id><published>2010-10-25T04:52:00.000-07:00</published><updated>2010-10-25T05:15:27.234-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3.x'/><category scheme='http://www.blogger.com/atom/ns#' term='etraxis'/><category scheme='http://www.blogger.com/atom/ns#' term='итраксис'/><category scheme='http://www.blogger.com/atom/ns#' term='bugtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='багтрекинг'/><category scheme='http://www.blogger.com/atom/ns#' term='issue tracking'/><title type='text'>eTraxis теперь в линейке 3.х</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Прошел всего какой-то год (без нескольких дней), с того дня как я объявил о переходе &lt;a href="http://scm-notes.blogspot.com/2009/10/etraxis-2x.html"&gt;eTraxis на линейку 2.х&lt;/a&gt;. И таки шо бы вы думали? Да, он теперь &lt;a href="http://etraxis.blogspot.com/2010/10/new-version-300.html"&gt;перерос в линейку 3.х&lt;/a&gt;! :) С чем и поздравляю его бессменного новатора - Артёма. Напомню, что мне довелось одно время быть соучастником этого проекта, так что за судьбой его слежу пристально.&lt;br /&gt;&lt;br /&gt;Для тех, кто не в курсе, краткое содержание предыдущих серий.&lt;br /&gt;&lt;br /&gt;eTraxis - это система отслеживания запросов на изменение. Такие системы ещё называют багтрекерами, трекерами, системами отслеживания ошибок, системами управления задачами. По-разному, в общем, называют. Казалось бы, систем таких - навалом, зачем ещё одна? Многим из них не хватает одного - гибкости настройки жизненного цикла (кто не знает, что это такое - читаем заметку про багтрекеры). А те, что гибко настраиваются - нетривиальны в настройке. Даже Redmine, который я уже &lt;a href="http://scm-notes.blogspot.com/search/label/redmine"&gt;некоторое время описываю&lt;/a&gt; в своих заметках, местами непрост в части, касающейся настройки графа переходов и прав пользователей.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Вот поэтому и был начат проект eTraxis. Задача была ни много, ни мало, а сделать гибкую и простую одновременно систему отслеживания запросов на изменение. Можно сказать, что это вполне получилось. Можно зайти на &lt;a href="http://code.google.com/p/etraxis/"&gt;главную страницу проекта&lt;/a&gt; и прочитать список фич и даже качнуть демку - и многое станет понятно.&lt;br /&gt;&lt;br /&gt;Что же такого появилось в Итраксисе, что сподвигло на изменение главного номера версии с 2 на 3?&lt;br /&gt;&lt;br /&gt;Главное изменение - это переработка UI. Появились табы и боковые деревья - все зависимые от контекста. Отсюда выполнение многих задач стало проще. В первую очередь, управление шаблонами - именно оно всегда вызывает вопросы тех, кто хочет кастомизировать жизненный цикл выполняемых задач. Кроме того, добавилось немного разного AJAX'а - опять таки, удобства ради и user experience'а для. В самом релизе 3.0.0 добавилось несколько новых фич, например, вью и фильтры стали единым целым.&lt;br /&gt;&lt;br /&gt;Не прошли стороной изменения и инфраструктуру самого проекта. Теперь все материалы переехали на площадки Google. Используется &lt;a href="http://code.google.com/p/etraxis/"&gt;Google Сode&lt;/a&gt; (код, документация, сами релизы), &lt;a href="http://groups.google.com/group/etraxis"&gt;Google Groups&lt;/a&gt; (список рассылки, он же форум) и &lt;a href="http://etraxis.blogspot.com/"&gt;Blogger&lt;/a&gt; (блог проекта). Старый домен планируется закрыть, т.к. Гугл покрыл собой всё, что было надо.&lt;br /&gt;&lt;br /&gt;Кроме того, Итраксис теперь распространяется под &lt;a href="http://www.gnu.org/licenses/gpl.html"&gt;GPLv3&lt;/a&gt; (ранее был &lt;a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"&gt;GPLv2&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Теперь стоит ожидать новых релизов чаще чем раньше, поскольку именно недостатки старого UI сдерживали автора от реализации новых фич. Ну а если кто захочет сделать вклад в развитие - велкам, многие &lt;a href="http://code.google.com/p/etraxis/people/list"&gt;уже поучаствовали&lt;/a&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-177467349600419451?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/177467349600419451/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/10/etraxis-3.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/177467349600419451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/177467349600419451'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/10/etraxis-3.html' title='eTraxis теперь в линейке 3.х'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-2235705858580618242</id><published>2010-10-11T05:51:00.000-07:00</published><updated>2010-10-11T05:51:57.540-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><category scheme='http://www.blogger.com/atom/ns#' term='rational'/><category scheme='http://www.blogger.com/atom/ns#' term='новичков'/><category scheme='http://www.blogger.com/atom/ns#' term='rup'/><category scheme='http://www.blogger.com/atom/ns#' term='ibm'/><category scheme='http://www.blogger.com/atom/ns#' term='unified'/><title type='text'>Управление конфигурациями в Rational Unified Process</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Не так давно Александр Новичков &lt;a href="http://anovichkov.msk.ru/?p=1290"&gt;сделал перевод той части RUP&lt;/a&gt;, которая касается SCM. Частично процитирую предисловие автора:&lt;br /&gt;&lt;blockquote&gt;Данный материал представляет собой перевод Rational Unified Process в части описания дисциплины управления конфигурациями.&amp;nbsp; &lt;/blockquote&gt;&lt;blockquote&gt;... статья будет полезна всем, кто захочет оформить (формализовать, описать) процесс управления конфигурациями, взяв за основу Rational  Unified Process. Кстати обратите внимание на логичность и стройность  предлагаемого процесса, а для себя сделайте небольшое резюме: ведь  по-крупному в RUP  ничего нет принципиально нового &amp;nbsp;- все, что здесь описано и так  применяется в организациях. Вопрос только объема и уровня формализации&lt;/blockquote&gt;По традиции, хочется сказать несколько &lt;strike&gt;слов&lt;/strike&gt; абзацей в дополнение.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Что примечательно в продуктах IBM Rational – это основательность и монструозность подхода. Главная характеристика, которая приходит в голову, когда знакомишься с чем-то из их портфолио – это “МНОГО” :). Предусмотрено всё и, если быть в теме, то ничего больше и не нужно - у Рэшнл есть всё что надо, на любой случай. При этом, если вчитаться, всё логично и не так уж и сложно - бери RUP и знай себе, применяй под свои процессы в организации.&lt;br /&gt;Конечно, не всем подойдет RUP, нынче в моде всяческий Agile. Однако с материалом будет невредно ознакомиться всем, кто считает, что занимается управлением проектами и тем более управлением конфигурациями ПО.&lt;br /&gt;&lt;br /&gt;Сильно зацепил взгляд раздел "Представления". По сути описаны dynamic views и snapshot views, имеющиеся в IBM Rational ClearCase. При этом snapshot views - это модель, работающая в большинстве современных систем контроля версий, а вот dynamic - это привилегия единичных систем.&lt;br /&gt;&lt;br /&gt;Шаг «Определение правил конфигурационной идентификации» - его просто можно брать и копировать к себе в проект, соглашение об именовании бэйзлайна просто универсальное. Хотя, конечно, под проект можно и поменять - это лишь рекомендация от авторов стандарта.&lt;br /&gt;&lt;br /&gt;Очень непривычно воспринимать русскоязычные сокращения. СДП, ЗИ, ГКИ, УЗИ и т.д., и т.п. - латинские всегда выглядят привычнее, однако это дело личных привычек.&lt;br /&gt;&lt;br /&gt;При прочтении можно провести некоторые параллели с моими заметками. В частности, базовые версии - это &lt;a href="http://scm-notes.blogspot.com/2009/09/software-configuration-management_06.html"&gt;базовые конфигурации&lt;/a&gt;, управление запросами на изменения - это &lt;a href="http://scm-notes.blogspot.com/2009/09/scm.html"&gt;отслеживание запросов на изменение&lt;/a&gt;, группа контроля изменений - &lt;a href="http://scm-notes.blogspot.com/2009/09/scm.html"&gt;configuration control board&lt;/a&gt;. Ну и вообще, местами я в статьях повторил структуру процесса RUP, сам об этом не подозревая :)&lt;br /&gt;&lt;br /&gt;Хозяйке на заметку: как выяснилось, УК - это не только Уголовный Кодекс, но и Управление Конфигурациями ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-2235705858580618242?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/2235705858580618242/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/10/rational-unified-process.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2235705858580618242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2235705858580618242'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/10/rational-unified-process.html' title='Управление конфигурациями в Rational Unified Process'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-8579553813779215245</id><published>2010-10-07T23:32:00.000-07:00</published><updated>2011-08-04T01:07:16.991-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='features'/><category scheme='http://www.blogger.com/atom/ns#' term='redmine'/><category scheme='http://www.blogger.com/atom/ns#' term='недостатки'/><category scheme='http://www.blogger.com/atom/ns#' term='рэдмайн'/><title type='text'>О текущей работе с Redmine</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Не так давно &lt;a href="http://scm-notes.blogspot.com/2010/09/redmine.html"&gt;выбрали и настроили Redmine&lt;/a&gt; для управления запросами на изменения в небольшой команде. Что сказать - работа идет, система работе не мешает, и это неплохой показатель :)&lt;br /&gt;На сегодня пользователей - 8, (под)проектов - 22, записей - 260, из них закрытых - 190. Вполне нормальные показатели для примерно месяца работы.&lt;br /&gt;&lt;br /&gt;Сейчас используется только те возможности, которые идут с системой по умолчанию, т.е. допилено было только несколько вещей, которые можно поменять через веб-интерфейс. Что вылезло из мелких раздражителей.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Обновление статуса записи&lt;/b&gt;. Сейчас чтобы двинуть запись в новое состояние, надо жать на ссылку Update, после чего заполнять или изменять поля в форме. Неправильно. Удобно было бы показывать внизу записи формочку:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;список доступных состояний&lt;/li&gt;&lt;li&gt;список назначаемых &lt;/li&gt;&lt;li&gt;поле коммента&lt;/li&gt;&lt;/ul&gt;для быстрого перевода между состояниями. Ведь совсем нечасто приходится при обновлении записи к примеру менять категорию или приоритет. А так - без лишних нажатий можно было бы сделать что надо.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Фильтры&lt;/b&gt;. Вот воздал я себе фильтр, которым постоянно пользуюсь. Он показывает все открытые, сгруппированные по статусу, отсортированные по приоритету, к показом колонки с названием проекта и без пары лишних колонок. В проекте, где он был создан, он по дефолту применяется. Однако при переходе в другие проекты фильтрация сбивается. Хорошо, что фильтр я создал именованный - достаточно просто нажать на его название на панели справа, и он применяется. Но ведь это надо делать каждый раз, находясь "не в своём" проекте. Неправильно.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Логин&lt;/b&gt;. При закрытии браузера система перестает опознавать пользователя - приходится логиниться каждый раз. Мне пофик, у меня он всегда открыт, а машину отправляют в Hibernate - так что браузер не закрывается неделями. Но не все ж такие как я :) И многих это раздражает. Неправильно, в общем.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Странности.&lt;/b&gt; Иногда вылазают странности. Например, будучи админом всея Рэдмайна и конкретного проекта - не могу сменить приоритет задачи или передвинуть её в другое состояния. Эксперименты объяснений не дали. Пока считаю, что это побочный эффект изменения состава групп юзеров после заведения записи. Хотя не факт. В общем, работе пока не мешает, проявляется крайней редко.&lt;br /&gt;&lt;br /&gt;Однако это мелочи. Надо поискать - наверняка есть решения. Ещё, надо бы отдельно перебрать доступные плагины и подключить самое вкусное по мере того, как система будет использоваться активнее.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;. По многочисленным запросам - &lt;a href="http://scm-notes.blogspot.com/2011/08/redmine-close-issue.html"&gt;как закрыть задачу в Redmine&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-8579553813779215245?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/8579553813779215245/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/10/redmine.html#comment-form' title='Комментарии: 20'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8579553813779215245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8579553813779215245'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/10/redmine.html' title='О текущей работе с Redmine'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-6632507100136006838</id><published>2010-09-30T18:37:00.000-07:00</published><updated>2010-09-30T18:37:05.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='коротко'/><category scheme='http://www.blogger.com/atom/ns#' term='goo.gl'/><title type='text'>Коротко о главном</title><content type='html'>&lt;a href="http://goo.gl/AMY6"&gt;http://goo.gl/AMY6&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-6632507100136006838?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/6632507100136006838/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/09/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6632507100136006838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6632507100136006838'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/09/blog-post.html' title='Коротко о главном'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-6570863660209666687</id><published>2010-09-26T17:09:00.000-07:00</published><updated>2010-11-12T17:54:10.153-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ветвление'/><category scheme='http://www.blogger.com/atom/ns#' term='successful'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='model'/><category scheme='http://www.blogger.com/atom/ns#' term='слияние'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><title type='text'>A successful Git branching model</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Я не сторонник распределенных систем контроля версий, однако соглашусь с недавно переведенной &lt;a href="http://scm-notes.blogspot.com/2010/09/branch-per-task-workflow-explained.html"&gt;статьей о ветвлении&lt;/a&gt;: несомненной заслугой&amp;nbsp; распределенных систем контроля версий является то, что они открыли людям глаза на хорошие практики ветвления и слияния. При всей распространенности того же SVN, в нём ужасно реализованы ветки. Точнее,  их и ветками нельзя называть - там, по сути, отращивается новое дерево файлов, мрак в общем, на мой взгляд.&lt;br /&gt;&lt;br /&gt;Не удивительно, что стали появляться и вменяемые руководства по практикам ветвления для новоиспеченных лидеров рынка - в первую очередь git и Mercurial. На одно руководство &lt;a href="http://scm-notes.blogspot.com/2009/11/dvcs-cm-git.html"&gt;я уже ссылался&lt;/a&gt;. Не прошло и года, как я наткнулся на ещё одно руководство: &lt;a href="http://nvie.com/posts/a-successful-git-branching-model/"&gt;A successful Git branching model&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Что сказать - по наглядности переплюнуло всё, что я видел. Можно просто глянуть на картинки и посмотреть на нужные команды - и всё. Комментарии автора лишь связывают всё воедино. Читать/смотреть в обязательном порядке.&lt;br /&gt;&lt;br /&gt;В принципе, если git заменить на другое название системы контроля версий - хуже не станет, практики проиллюстрированы базовые до неприличия. Однако в данном случае подкупило то, как именно они проиллюстрированы :)&lt;br /&gt;&lt;br /&gt;В общем, enjoy.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update 1&lt;/b&gt;. &lt;a href="http://github.com/downloads/nvie/gitflow/Git-branching-model.pdf"&gt;PDF-версия&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update 2.&lt;/b&gt; &lt;a href="http://habrahabr.ru/blogs/development_tools/104993/"&gt;Обсуждение на Хабе&lt;/a&gt; закинутой ссылки, есть пара занятных ссылок.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update 3&lt;/b&gt;. &lt;a href="http://d-rectx-notes.blogspot.com/2010/09/git.html"&gt;Хороший перевод статьи&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-6570863660209666687?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/6570863660209666687/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/09/successful-git-branching-model.html#comment-form' title='Комментарии: 29'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6570863660209666687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6570863660209666687'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/09/successful-git-branching-model.html' title='A successful Git branching model'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>29</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-3628305424669007630</id><published>2010-09-20T01:57:00.000-07:00</published><updated>2011-08-04T01:09:25.224-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='внедрение'/><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='redmine'/><category scheme='http://www.blogger.com/atom/ns#' term='пример использования'/><category scheme='http://www.blogger.com/atom/ns#' term='пример внедрения'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><category scheme='http://www.blogger.com/atom/ns#' term='bugtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='workflow'/><category scheme='http://www.blogger.com/atom/ns#' term='рэдмайн'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><category scheme='http://www.blogger.com/atom/ns#' term='issue tracking'/><title type='text'>Личный опыт внедрения Redmine</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;Не так давно задумал совершить ряд движений и &lt;a href="http://scm-notes.blogspot.com/2010/08/choosing-right-tool.html"&gt;поменять СМ-процесс&lt;/a&gt;  в своём проекте и, если получится, на проекте соседнем. Поводом было  то, что меня перестал устраивать текущий инструмент отслеживания  запросов на изменения. Начав думать над одним, огляделся и понял, что  пора бы и всё остальное поменять, до чего давно не доходили руки.&lt;br /&gt;&lt;br /&gt;В общем, перво-наперво задача стояла поменять систему отслеживания запросов на изменения, или попросту багтрекер. К моменту написания заметки на пробу использовал Jira, подумывал оценить её и предложить соседней команде в качестве альтернативы использовавшегося ими Eventum. Когда стали обсуждать переход в участниками команды, решили посмотреть на прайс Джиры... посмотрели и решили, что Redmine, обладающий тем же функционалом, но за бесплатно, вполне подойдет :) У меня был опыт его настройки и внедрения в процесс, так что переход обещал быть быстрым.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Настройка &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Установили в локальную сеть на машину под управлением CentOS. Человек, непосредственно ставивший его, пользовался вот этой &lt;a href="http://www.catapult-creative.com/2009/02/04/installing-rails-on-centos-5/"&gt;инструкцией по установке&lt;/a&gt;. Всё заработало сразу. (Есть ещё вот такая заметка про &lt;a href="http://habrahabr.ru/blogs/sysadm/104610/"&gt;установку Redmine на CentOS + ISPManager&lt;/a&gt;, может быть, кому-то пригодится.)&lt;br /&gt;&lt;br /&gt;Дальше мне пришлось немного поколдовать, чтобы привести настройки системы в соответствие процессу разработки.&lt;br /&gt;&lt;br /&gt;Первым делом сменил заголовок. Был Redmine, стал &lt;b&gt;Красношахтинск&lt;/b&gt;! Зато нескучно :) Правда, потом пришел директор и поменял обратно ;) А заодно сделал перевод на русский перечислимых терминов, например группы пользователей, состояния в workflow и список приоритетов (будет ниже).&lt;br /&gt;&lt;br /&gt;Перво-наперво завел &lt;b&gt;проекты&lt;/b&gt;, соответствующие рабочим задачам. К примеру, проекты, над которыми работаю я, разбиваются естественным образом по доменникам, на которым проекты крутятся. Поддомены - это, в свою очередь, подпроекты. Ну и в ним - своё разделение. У меня получилось 3 уровня вложенности.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;А если задача к разным проектам?&lt;/b&gt; А в этом случае задача заводится в над-проекте. Например, есть www.project.ku и у него foo.project.ku и bar.project.ku. Задачи, общие для поддоменов, заводятся в www.project.ku.&lt;br /&gt;Вот в соседней Команде Д (&lt;a href="http://scm-notes.blogspot.com/2010/08/choosing-right-tool.html"&gt;см. предыдущий пост&lt;/a&gt;) проект один, разбиение на проекты было сделано по а) разделам сайта б) крупным фичам, затрагивающим несколько разделов или сайт целиком.&lt;br /&gt;В общем, способы нарезки предметной области у нас разные. Что лучше - посмотрим со временем, пока что всё устраивает.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Зачем вообще разбивать на проекты?&lt;/b&gt; Да хотя бы чтобы задачи не пересекались.в общем списке. Иногда это мешает, но в целом отторжения не вызывает. &lt;br /&gt;&lt;br /&gt;Дальше определились с &lt;b&gt;пользователями&lt;/b&gt;. Тут просто - завели на каждого участника проекта по юзеру, даже без привязки к Active Directory. &lt;b&gt;Роли&lt;/b&gt; &lt;b&gt;(roles)&lt;/b&gt; оставили те же, что и были по умолчанию и добавили новую, ну и директор их перевел на русский:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Менеджер&lt;/li&gt;&lt;li&gt;Разработчик&lt;/li&gt;&lt;li&gt;Репортер&lt;/li&gt;&lt;li&gt;Контент-менеджер &lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Группы пользователей (groups) &lt;/b&gt;фактически повторили роли - их стало 4 на каждую команду.&lt;br /&gt;&lt;br /&gt;Следующая серия допиливаний пришлась на workflow. &lt;b&gt;Трекеры (trackers) &lt;/b&gt;оставили почти как есть, с той разницей, что их переименовали. Было&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bug&lt;/li&gt;&lt;li&gt;New task&lt;/li&gt;&lt;li&gt;Support&lt;/li&gt;&lt;/ul&gt;Стало&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ошибка&lt;/li&gt;&lt;li&gt;Надо сделать&lt;/li&gt;&lt;li&gt;Разное&lt;/li&gt;&lt;/ul&gt;Что вполне соответствует их назначению в команде. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Приоритеты (priority)&lt;/b&gt; также были переименованы во избежание разночтений:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;На потом (эту я добавил)&lt;/li&gt;&lt;li&gt;Низкий&lt;/li&gt;&lt;li&gt;Обычный&lt;/li&gt;&lt;li&gt;Высокий&lt;/li&gt;&lt;li&gt;Срочно!&lt;/li&gt;&lt;li&gt;Незамедлительно!!!&lt;/li&gt;&lt;/ul&gt;Дальше я решил немного доработать workflow, созданный по умолчанию. В первую очередь, состояния были переименованы:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Новая&lt;/li&gt;&lt;li&gt;Выполняется&lt;/li&gt;&lt;li&gt;Решена&lt;/li&gt;&lt;li&gt;Ожидает проверки&lt;/li&gt;&lt;li&gt;Закрыта&lt;/li&gt;&lt;li&gt;Отклонена&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Закрыта и Отклонена - это финальные состояния, перевод в них &lt;b&gt;закрывает задачу&lt;/b&gt;. Убрал из переходов состояние "Ожидает проверки" (Feedback). В принятом процессе оно было лишнее. Текущий процесс приведен ниже под пунктом "&lt;b&gt;Использование&lt;/b&gt;" &lt;br /&gt;&lt;br /&gt;Что ещё оставалось сделать - &lt;b&gt;связать репозиторий SVN с Redmine&lt;/b&gt;.&lt;br /&gt;Тут ждала неожиданность: если несколько проектов используют один репозиторий, то к каждому проекту его надо подцеплять отдельно! Учитывая, что репо у "Команды Д" Рэдмайн пережевывал минут 5 (и, соответственно, отъедал место на сервере под свою базу), подцепить репо к каждому из десятка проектов - это тот ещё геморрой... Увы, поиск по манам и форумам ничего не дал - пришлось подцеплять репо к проектам постепенно, по мере необходимости.&lt;br /&gt;&lt;br /&gt;Отдельно надо сказать про &lt;b&gt;связь записей Redmine и ревизий SVN&lt;/b&gt;. У Рэдмайн есть отличная фича - связывание ревизий в системе контроля версий и своих записей в базе. Т.е. если Василий Пупкин пофиксил в SVN ревизии 9874&amp;nbsp; баги #125 и #145, то в этих записях появятся ссылки на эту самую ревизию с указанием комментария из ревизии. Соответственно, можно пойти по ссылке и посмотреть внесенную дельту.&lt;br /&gt;Для того, чтобы эта схема работала, надо чтобы в комментарии к ревизии было ключевое слово и номер записи, например "Just made minor fix #124.", где fix - ключевое слово, а #124 - это привязка к записи. Списко ключевых слов редактируется вот тут:&lt;br /&gt;&lt;br /&gt;http://local_redmine/settings/edit?tab=repositories&lt;br /&gt;секция &lt;b&gt;Referencing keywords&lt;/b&gt;. Я добавил ключевые слова "fix,##,пофиксил,фикс".&lt;br /&gt;Кстати, там же есть возможность привязывать ревизии к определенным состояниям записей - вообще чума! Жаль, нигде не пригодилось :)&lt;br /&gt;&lt;br /&gt;Ну и ещё мелочь - о новых ревизиях Рэдмайн узнает (и связывает с задачами) только в 2 случаях:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Когда кто-то заходит во вкладку "Хранилище" (Repository) или&lt;/li&gt;&lt;li&gt;По запуску спецскрипта (например, по крону).&lt;/li&gt;&lt;/ol&gt;Об этом надо помнить и что-нибудь с этим сделать сразу после первичной настройки системы.&lt;br /&gt;&lt;br /&gt;Из первичной настройки - вроде всё.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Использование&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Текущий процесс&lt;/b&gt; работы над задачей выглядит примерно так.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Запись заводится в состоянии Новая.&lt;/li&gt;&lt;li&gt;Назначается на разработчика.&lt;/li&gt;&lt;li&gt;Когда начинается работа, разработчик переводит в "Выполняется".&lt;/li&gt;&lt;li&gt;Выполнена - он переводит её в "Решена".&lt;/li&gt;&lt;li&gt;Менеджер, видя статус или услышав об изменении от разработчика - в  одном комнате ведь сидим ;) - проверяет решение и переводит в  "Закрыто".&lt;/li&gt;&lt;li&gt;Или же обратно в одно из предыдущих состояний.&lt;/li&gt;&lt;li&gt;Если заведенная запись не будет решаться по каким-то причинам - она двигается менеджеров в "Отклонена".&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;Права &lt;/b&gt;выставлены по следующим принципам:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Менеджер может всё и ему разрешено движение между любыми состояниями.&lt;/li&gt;&lt;li&gt;Разработчик может двигать запись только между соседними  состояниями. Например, из "Выполняется" - только "Новая" и "Решена" или  из "Новая" в "Выполняется". Закрыть задачу (перевести в "Закрыта" или  "Отклонена") разработчик не может, иначе задача пропадет из поля зрения  менеджера. Вместо этого он переводит её в "Решена" с соответствующим  комментом.&lt;/li&gt;&lt;li&gt;Репортер (по сути, тестер или сторонний наблюдатель) имеет право только на заведение записи.&lt;/li&gt;&lt;/ol&gt;Просто и всем понятно. Процесс в проектах несложный, поэтому и трекеры настроены соответствующим образом.&lt;br /&gt;&lt;br /&gt;Кроме того, сразу была задействована &lt;b&gt;встроенная Вики&lt;/b&gt;. Туда сейчас постепенно переносим нужную информацию.&lt;br /&gt;&lt;br /&gt;Напоследок о фильтрах записей. Поскольку их (записей) было сразу заведено под сотню, понадобилось это всё как-то фильтровать. Помогли &lt;b&gt;фильтры&lt;/b&gt;. Настроили пару-тройку public фильтров, чтобы все могли пользоваться.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Все открытые, сгруппированные по состояниям", с сортировкой по приоритету - этот зрительно дает посмотреть что в работе, что закончено и что из очереди новых задач более приоритетное. Кроме того, тут же позывается столбец "Проект", чтобы видеть, откуда задача прилетела.&lt;/li&gt;&lt;li&gt;Разработчики настроили себе "Мои выполняющиеся" - туда попадают все, что в состояниях до "Решено". Мол, пусть решенные мозолят глаза менеджерам :)&lt;/li&gt;&lt;li&gt;"Все решенные незакрытые" - это для менеджеров, видеть что уже сделано.&lt;/li&gt;&lt;/ul&gt;Фильтры настраиваются очень просто, так что вполне может быть, что-то появится ещё.&lt;br /&gt;&lt;br /&gt;Из повседневного - пока что всё. Посмотрим, что будет дальше.&lt;br /&gt;&lt;br /&gt;P.S. Кому как, а у меня Redmine уже ассоциируется больше с системой управления проектами, чем с простым багтрекером.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Updates&lt;/b&gt;. Может также пригодиться инструкция по &lt;a href="http://nightcoder.livejournal.com/6223.html"&gt;установке RedMine на Windows&lt;/a&gt;.&amp;nbsp;Кому лень настраивать руками - есть отличная замена - &lt;a href="http://bitnami.org/stack/redmine"&gt;Bitnami Stack&lt;/a&gt;.&lt;br /&gt;Ну и вообще - почитайте до кучи &lt;a href="http://www.rsdn.ru/forum/tools/3965816.flat.aspx"&gt;обсуждение заметки на RSDN&lt;/a&gt;, есть полезные посты.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://scm-notes.blogspot.com/2010/10/redmine.html"&gt;Как Redmine используется сейчас&lt;/a&gt;. И по многочисленным запросам -&amp;nbsp;&lt;a href="http://scm-notes.blogspot.com/2011/08/redmine-close-issue.html"&gt;как закрыть задачу в Redmine&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;А кому не хочется Редмайн - можете &lt;a href="http://scm-notes.blogspot.com/2010/10/etraxis-3.html"&gt;попробовать eTraxis&lt;/a&gt;. Очень рекомендую.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-3628305424669007630?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/3628305424669007630/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/09/redmine.html#comment-form' title='Комментарии: 18'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/3628305424669007630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/3628305424669007630'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/09/redmine.html' title='Личный опыт внедрения Redmine'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-5637409999950275799</id><published>2010-09-06T18:38:00.000-07:00</published><updated>2010-09-06T23:30:22.724-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yandex'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='engineer'/><category scheme='http://www.blogger.com/atom/ns#' term='яндекс'/><title type='text'>Кто такой релиз-инженер</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;В продолжение вопроса о том, &lt;a href="http://scm-notes.blogspot.com/2010/06/piano-player-at-brothel.html"&gt;кто такой СМ-инженер&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Анатоликс не так давно вывесил вакансию &lt;a href="http://anatolix.livejournal.com/51724.html"&gt;релиз-инженера для поиска Яндекса&lt;/a&gt; . Собственно, по ссылке - пример того, кто такой настоящий release engineer. Практически тем же самым (ну, с поправкой на количество серверов), мы занимались во времена работы с &lt;a href="http://www.linkedin.com/in/udovichenko"&gt;интеграционной команде&lt;/a&gt; Моторолы.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Стало быть, Яндекс решил выделить релиз-инженера в отдельную роль. Офигеть, что же у них раньше творилось и какой был геморой у тех людей, которым надо было совмещать основные обязанности техлидов и того, кто выпускал релизы. При интенсивной разработке большой командой это немалый труд. Ну, если найдут нужного человека - жизнь их станет значительно легче и приятнее :)&lt;br /&gt;&lt;br /&gt;Кстати, вот &lt;a href="http://www.rsdn.ru/forum/job.offers/3927279.flat.aspx"&gt;обсуждение на RSDN&lt;/a&gt;. Для сравнения - &lt;a href="http://www.sql.ru/Forum/actualthread.aspx?bid=9&amp;amp;tid=783389"&gt;обсуждение на sql.ru&lt;/a&gt;, прям небо и земля...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-5637409999950275799?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/5637409999950275799/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/09/release-engineer.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5637409999950275799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5637409999950275799'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/09/release-engineer.html' title='Кто такой релиз-инженер'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-2069316990321833785</id><published>2010-09-06T15:40:00.000-07:00</published><updated>2010-12-19T18:33:03.144-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='шаблоны'/><category scheme='http://www.blogger.com/atom/ns#' term='merge'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Plastic'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><category scheme='http://www.blogger.com/atom/ns#' term='интеграция'/><category scheme='http://www.blogger.com/atom/ns#' term='bugtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='task'/><category scheme='http://www.blogger.com/atom/ns#' term='workflow'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><title type='text'>Развернуто об одной ветке на каждую задачу</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Периодически  читаю посты из &lt;a href="http://codicesoftware.blogspot.com/"&gt;командного  блога&lt;/a&gt; Plastic  SCM - продукта, &lt;a href="http://scm-notes.blogspot.com/2010/04/plastic-scm.html"&gt;обзор   которого&lt;/a&gt; я не так давно делал. Продукт очень интересный, поэтому   стараюсь быть в курсе того, что у них происходит.&lt;br /&gt;И вот   публикуется очередная статья, называется &lt;a href="http://codicesoftware.blogspot.com/2010/08/branch-per-task-workflow-explained.html"&gt;Branch   per task workflow explained&lt;/a&gt;.      Как следует из названия, описывает,   почему же надо придерживаться      политики ветвления "одна задача - одна   ветка". Предполагаемый   уровень  читателя - новички в области контроля версий, применяющие   простые  практики.&lt;br /&gt;Так понравилась, что   решил перевести. Думаю,  многим покажется интересной, несмотря на то, что объясняются, в  общем-то, простые вещи.&lt;br /&gt;&lt;br /&gt;Итак, текст.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Цель      статьи - объяснить как   работает шаблон "одна ветка на задачу", и      почему контролировать проекты - это хорошо. Шаблон этот также  известен     как "ветка для фичи",   "отладочная ветка", "ветка для  задачи" и даже     "ветка для ошибки".&lt;br /&gt;Ветвление   и слияние с  последнее время  стали    горячо обсуждаемой темой, особенно   в связи с  ростом  популярности    распределенных систем контроля версий, так    что, думаю,  вам эта заметка    будет весьма кстати :)&lt;br /&gt;Я также   попытаюсь обозначить взаимосвязь между этим шаблоном и гибкими   методологиями типа Scrum.&lt;br /&gt;Ещё      я объясню почему "ветка на задачу"   является основой для    параллельной   разработки, и почему этот шаблон   гораздо лучше  последовательной разработки ("разработки на транке").&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Что такое задача&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Для      начала позвольте   задать вопрос: вы используете систему   отслеживания    запросов на   изменения? Если да - переходите к   следующему  подразделу.   Нет -   продолжайте читать!&lt;br /&gt;&lt;br /&gt;Так   значит, у  вас нет   системы   багтрекинга?! Это надо исправить в   первую очередь.  Возьмите   уже хоть   какую-нибудь систему. Нет, не   надо тут разводить  долгих и   скучных оценок   и сравнений, просто   возьмите любую, ведь  любая система -   это лучше,  чем  ничего. А   вообще, прочитайте &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;Joel's     test: 12 steps to better code&lt;/a&gt; и трижды проверьте пункт 4.&lt;br /&gt;Есть   много систем, которые можно использовать:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Бесплатные:   Bugzilla,  Mantis, Trac&lt;/li&gt;&lt;li&gt;Коммерческие: Jira, OnTime, Rally, VersionOne&lt;/li&gt;&lt;/ul&gt;И много других.&lt;br /&gt;Системы отслеживания запросов на изменения        предназначены для отслеживания любых запросов (и ошибок), не        ограничиваясь одними лишь ошибками.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Правило для   применения&lt;/b&gt;: всё, что угодно, может быть задачей - любое изменение,   которое делается&amp;nbsp; в коде, имеет соответствующую задачу.&lt;br /&gt;&lt;br /&gt;Да,        может показаться невероятным то, что вы до сих пор ничего   подобного    не   делаете, однако запомните: никогда больше не делайте   изменений в    коде   без соответствующей задачи. Не важно, исправляете   ли вы  ошибку,     выравниваете кнопочку или же разрабатываете  абсолютно  новую  фичу:     создайте для них задачу!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Примечание&lt;/b&gt;:    не     устраивайте кошмар руководству проекта и не пытайтесь  заставить       разработчиков постоянно обновлять свои задачи распоследней   информацией.     Они попросту не будут этого делать или  будут, но это   займет столько     времени, что уж лучше бы не делали.  Будьте проще.&lt;br /&gt;&lt;b&gt;Примечание   (ещё одно)&lt;/b&gt;:     разработчики  должны принять систему отслеживания как   базовый     механизм, как  нечто, что помогает им ежедневно видеть, что же   они     делают. Если  они примут это как ещё один механизм надсмотра со   стороны      менеджмента, то всё будет значительно менее эффективным, чем      хотелось   бы.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Задача должна быть   короткой!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Предполагается,      что задачи должны быть   короткими, как и исправления ошибок. Так   что    не заводите задачи,   которые предполагается решать 3 недели.    Разделите   её на более короткие.   Если вы более привычны к гибким    методикам  вроде  Scrum, то вы сразу   вспомните одно из ключевых    правил, гласящих,  что  длительность задач надо   держать не выше 16    часов. Думаю, это  очень  хорошее правило.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Жизненный цикл задачи&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Схема      ниже  показывает, как работает жизненный цикл задачи, её      взаимоотношение со  всем процессом Scrum. Примечание: задачи, на которые я ссылаюсь,      это те задачи, на  которые разбиваются истории пользователей - user      stories в терминологии  Scrum - во время планирования спринта. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_z6qpykplUvI/TFrDxOeBk5I/AAAAAAAAA1E/0XLmUJTJRBk/s400/taskcycle.png"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5501925145251517330" src="http://2.bp.blogspot.com/_z6qpykplUvI/TFrDxOeBk5I/AAAAAAAAA1E/0XLmUJTJRBk/s400/taskcycle.png" style="display: block; height: 308px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Контроль       версий находится в самом центре схемы в качестве координатора     картинки  в  целом, однако давайте посмотрим, каковы основные     компоненты.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Задача&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;О чем это?&lt;/b&gt;       Любой чих будет задачей, а задачи, как уже говорилось выше,      управляются  вашей любимой системой отслеживания. Что важнее, задачи      возникают из  списка пожеланий по продукту (заявок от клиентов, списка      пожеланий, и  т.п.)&lt;br /&gt;&lt;b&gt;Кто это использует?&lt;/b&gt; Все. Завести задачу может  разработчик, также как и менеджер; тестеры могут найти ошибку, дефект и  т.д.&lt;br /&gt;Задача - это центральный элемент в координации проекта.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Ветка&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;О чем это?&lt;/b&gt;      Это основа  работы разработчика. Разработчики будут всегда работать    на   ветках,  и никогда - на главной ветке (транке). Каждая задача будет    всегда   начинаться  из хорошо известной точки, базовой конфигурации  или     стабильного релиза.&lt;br /&gt;&lt;b&gt;Кто  это использует?&lt;/b&gt;  Разработчики в     повседневной работе. Интеграторы,  когда надо создать  релиз. Каждая     задача тестируется и валидируется,  прежде чем её  метят как  завершенную в    системе отслеживания.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Интеграция&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;О чем это?&lt;/b&gt;      Когда ряд  задач закончен, самое время создать новый релиз.  Помните,     что  "выпускайте пораньше, выпускайте почаще" - это лучшая  практика   для    предотвращения "большого взрыва при интеграции", корня  всех зол в   мире  SCM.&lt;br /&gt;&lt;b&gt;Кто  это использует?&lt;/b&gt;  Интеграторы.  Интеграторами   могут  быть разработчики,  играющие эту роль  раз в  неделю, раз в день  -  в  зависимости от частоты  создания релизов.&lt;br /&gt;В   больших  проектах   интегратор может быть  полноценной штатной  единицей.  Они не  только   сливают изменения обратно на  главную ветку,  но и отвечают  за  то, что   отстройка производится  правильно. Поэтому  они, вероятнее   всего, бегло   просмотрят код, зададут&amp;nbsp;  вопросы  разработчикам, если  что-то  не совсем   ясно или ведет к  конфликтам.  Ответственность - вот  ключевое  слово,   стоящее за ролью  интегратора.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Примечание для маньяков continuous  intergration:&lt;/b&gt; да, &lt;a href="http://codicesoftware.blogspot.com/2008/03/continuous-integration-future.html"&gt;после  continuous integration жизнь есть&lt;/a&gt;      и, вообще говоря, ветки для  задач, исправляют типичные упущения CI  и     переводят его на другой  уровень. Пройдите по указанной выше  ссылке и     посмотрите на следующие  шаги, упомянутые в книге Дюваля  про CI.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Релиз&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Что  это?&lt;/b&gt;      Результатом интеграции является новый стабильный релиз.    "Стабильный"    означает, что он прошел все тесты и не осталось ни одной    известной    ошибки (или все они хорошо известны).&lt;br /&gt;&lt;b&gt;Кто это  использует?&lt;/b&gt;      Вся команда. Как только релиз закончен, он может быть  отдан  команде     тестирования (если таковая есть). Разработчики будут   использовать     свежевыпущенный релиз как отправную точку для новых  задач,  над  которыми    они будут работать во время следующего рабочего  цикла.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Часто задаваемые вопросы&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Вопрос:&lt;/b&gt;  Ну так всё-таки, что же такое&amp;nbsp;ветка для задачи?&lt;br /&gt;&lt;b&gt;Ответ:&lt;/b&gt;      Вы,  наверное, слышали про концепцию отладочных веток или веток для      фич, не  так ли? Ладно, даже если не слышали, ответ таков: это  ветка,     которую вы  используете для решения задачи. Она  кратковременна и её     назначение -  быть использованной для отдельной  фичи или исправления     ошибки.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Вопрос:&lt;/b&gt;  Но ведь ветки - это зло?&lt;br /&gt;&lt;b&gt;Ответ:&lt;/b&gt;      Да кто ж вам такое сказал?  Вычитали наверное где-нибудь в    руководстве   или на форуме по Subversion,  может даже на каком-то    другом сайте по   SCM, да? Ветки - это  великолепный инструмент    разработчика, но в   большинстве систем контроля  версий они неправильно    реализованы - в том   же CVS или Subversion,  SourceSafe,  Perforce,    Team Foundation Server и   многих других. А потом  говорят, что    ветвление - это нехорошо. Наглая   ложь! Ветвление - отличная  вещь, и    надо использовать его ежедневно,  вот  только инструмент для него  надо    использовать правильный.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Это не  про DVCS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;В      последнее время буквы DVCS  (распределенные системы контроля  версий)     стали буквально заклинанием на  программерских форумах.  Благодаря  Git  и&amp;nbsp;   Mercurial целые орды  программеров заинтересовались   распределенными    системами и, что ещё  важнее, ветвлением и  слиянием. И  хотя ветка на    задачу - базовый сценарий  работы для  большинства  практиков DVCS    (включая Plastic SCM), это не  означает,  что он  является следствием их    распределенной структуры. Отнюдь  -  это лишь  следствие того, что они    хорошо работают с ветвлением и   особенно  слиянием.&lt;br /&gt;&lt;br /&gt;Факты    говорят за себя: хорошие   распределенные системы хороши с  ветвлении и    слиянии, однако ветка на   задачу - это не только из области     распределения, их можно отлично   сделать и в централизованных системах.     Вот только большинство   централизованных систем вроде Subversion, CVS,     TFS, Perforce и им   подобных не умеют обрабатывать ветки нормальным     образом.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Почему ветка на задачу лучше?&lt;/span&gt;  &lt;br /&gt;&lt;br /&gt;Я      детально описал шаблон "ветка на задачу", рассказал о  жизненном    цикле   задачи и его основных элементах. Так что теперь вы  вполне     представляете  почему этот подход хорош. Теперь я намереваюсь  подробно     осветить  почему ветка на задачу - это лучший способ работы  почти  для    всех команд  почти всё время (есть всё-таки обстоятельства,   когда не    надо так часто  ветвиться, однако это бывает не так часто).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Столкновение миров: последовательная  разработка против параллельной&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;Давайте       рассмотрим типичный проект, который работает по шаблону      последовательной  разработки, более известному как "разработка на      транке" или "разработка  на главной ветке". Он всего лишь означает, что      все кладут (или "чекинят", от "check in") свои изменения на одну и ту же  ветку.     Подобный подход очень  легко настраивается, очень легко  понимается и     именно ему следуют  большинство разработчиков,  использующих  инструменты    типа Subversion,   CVS, SourceSafe и иже с  ними.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/THaqRr-a3AI/AAAAAAAAA2U/jZU0jS2j9lI/s1600/trunkdevelopment00.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5509778414973410306" src="http://1.bp.blogspot.com/_z6qpykplUvI/THaqRr-a3AI/AAAAAAAAA2U/jZU0jS2j9lI/s400/trunkdevelopment00.png" style="display: block; height: 313px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;Как     видно из рисунка, проект развивается путем внесения изменений на     единственную ветку (транк, главную ветку). Каждый разработчик вносит на     эту ветку свои изменения и поскольку она - это центральное место     взаимодействия для всех, то членам команды надо быть очень осторожными. А     именно, избегать ситуаций, когда у разработчика ломается отстройка и    эти  не строящиеся изменения вносятся на единую ветку.&lt;br /&gt;&lt;br /&gt;В     примере на схеме видно как Пэт (Pat) создает новую форму загрузки,  но    вносит ошибку через набор изменений 10476. После чего должна   поправить   её и чуть позже внести на главную ветку (cset:10478). Это   значит, что   отстройка была поломана между изменениями 10476 и 10478, а   все, кто   обновляет свои копии в промежутке между ними, будут   затронуты этой   ошибкой. Именно так, скорее всего, и произошло с Пабло   (pablo) после   того, как он внёс набор изменений 10477 и обновил свою   рабочую копию.&lt;br /&gt;&lt;br /&gt;Особо   внимательные могли заметить,  что  мы смешиваем важные изменения в   cset:10474 (большое изменение в  одном  из базовых запросов, которое может   поломать приложение самыми   экзотическими способами) и cset:10475. Что   это значит? Это значит, что   если бы нам надо было выпустить очередную   версию системы, то базовая   конфигурация получилась бы неготовой или   недостаточно стабильной.&lt;br /&gt;&lt;br /&gt;А теперь посмотрим, как этот сценарий выглядел бы при параллельной разработке.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/THaqg7nJiqI/AAAAAAAAA2c/u_kCGDHvTQE/s1600/paralleldev00.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5509778676868811426" src="http://1.bp.blogspot.com/_z6qpykplUvI/THaqg7nJiqI/AAAAAAAAA2c/u_kCGDHvTQE/s400/paralleldev00.png" style="display: block; height: 378px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Как     видно, здесь задействованы несколько веток, поскольку каждая задача     теперь - это отдельная ветка. А ещё есть стрелки слияния (зеленые   такие)   и базовые конфигурации (&lt;a href="http://scm-notes.blogspot.com/2009/09/software-configuration-management_06.html"&gt;baselines&lt;/a&gt;,     мы и раньше могли их создавать, однако с новым шаблоном их создание     стало ещё понятнее). Взяв этот пример за основу, я пройдусь по     проблемам, с которыми мы можем столкнуться при последовательной     разработке, объясню как их поможет избежать параллельная разработка и     почему эта модель лучше.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Код всегда под контролем&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Как     часто вы чекинитесь (вносите изменения в систему контроля), когда     работаете на транке (при разработке на единственной ветке)? Спорим, вы     прежде пять раз подумаете, потому как очень не хочется видеть коллег  по    работе, орущих на вас за то, что из-за ваших изменений отстройка   упала?&lt;br /&gt;&lt;br /&gt;Ну  так вот, вы работаете над трудной задачей -   сложные изменения,  несколько дней работы - где вы храните код? Он под   контролем версий?  Скорее всего, нет, ведь вы не чекините код, который   не компилируется, не  закончен или конфликтует другими изменениями. Это   немалая проблема и  одновременно обычная вещь при применении   единственной ветки: изменения  долго находятся за пределами контроля   версий до тех пор, пока  разработчики не закончат работу. Контроль   версий используется лишь как  механизм доставки вместо полноценной   системы.&lt;br /&gt;&lt;br /&gt;С шаблоном "ветка на задачу" у вас не будет такой проблемы: вы можете&lt;a href="http://codicesoftware.blogspot.com/2009/05/self-documented-development-through.html"&gt; вносить изменения так часто, как хотите&lt;/a&gt;, даже просто ради того, чтобы быть уверенными в том, что разработка полностью под контролем.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Боковая панель - она же работала 5 минут назад!!!&lt;/b&gt;    Наверняка с вами такое случалось: работаете над изменениями, код    работает, что-то поменяли, всё поломалось и вы теряете время, пытаясь    понять (обычно комментируя и раскомментируя куски кода), что же вы    сделали не так. Такие вещи вполне обычны, когда вы экспериментируете,    изучаете API или работаете над чем-то сложным. Если вы на своей ветке -    почему бы не чекиниться после каждого изменения? Тогда вам не придется    полагаться на (рас)комментирование кода для проверки вариантов  работы.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Держите главную ветку нетронутой&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Поломка   отстройки - вещь достаточно частая при разработке на одной  ветке.   Чекините какой-то код, который не протестировали как следует - и  вы уже   не проходите какие-то тесты или даже хуже: код перестает  строиться.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://codicesoftware.blogspot.com/2008/08/4-steps-to-make-version-control-shine.html"&gt;Держать главную ветку нетронутой&lt;/a&gt;    - это одна из целей "ветки на задачу": вы специальным образом    контролируете всё, что идет на главную ветку, поэтому так просто    поломать билд уже не получится.  Кроме того, имейте в виду, что   использование одной ветки сильно  отличается: вместо того, чтобы быть   местом встречи для всей команды, где  все постоянно обмениваются друг с   другом и всё может пойти не так как  надо, теперь главная ветка - это   стабильная точка с хорошо проверенным  базисом.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Имейте хорошие точки отсчета, не стреляйте по движущимся мишеням!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Когда вы работаете на единой ветке, то чаще всего трудно сказать, от чего ты ведете отсчет своей рабочей копии.&lt;br /&gt;&lt;br /&gt;Позвольте   пойти чуть дальше: как видно из картинки ниже, в какой-то  момент вы   обновляете рабочую копию с /main. Что это за момент? Это явно  не BL130,   потому что после неё были ещё некоторые изменения. Поэтому  если   появляется ошибка, какова её причина - предыдущие изменения или  ваши?  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/TFrHSVJ_N-I/AAAAAAAAA1c/eY2X5Fp2c1g/s1600/mainlinehell.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5501929012517091298" src="http://1.bp.blogspot.com/_z6qpykplUvI/TFrHSVJ_N-I/AAAAAAAAA1c/eY2X5Fp2c1g/s400/mainlinehell.png" style="cursor: pointer; display: block; height: 115px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Конечно,   вы можете сказать: если использовать continuous integration, то всегда   можно убедиться, что отстройка проходит нормально (при том, что это   достаточно инертная техника - сначала ломаем билд, потом его чиним),   поэтому что бы вы ни залили - оно будет в порядке. Да, вы правы, однако   что это за конфигурация? Если обновиться в этот момент, то вы будете   работать с промежуточной конфигурацией, чем-то малоопробованным... вы   будете стрелять по движущейся мишени!&lt;br /&gt;&lt;br /&gt;А сейчас посмотрите, как ситуация будет выглядеть при использовании ветки на задачу:&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_z6qpykplUvI/THaqpXlo1FI/AAAAAAAAA2k/L-NPbbgqJ2g/s1600/startingfromawellknownpoint.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5509778821817619538" src="http://2.bp.blogspot.com/_z6qpykplUvI/THaqpXlo1FI/AAAAAAAAA2k/L-NPbbgqJ2g/s400/startingfromawellknownpoint.png" style="cursor: pointer; display: block; height: 329px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Как   видно, здесь большая разница: все задачи начинаются из одной хорошо   известной отправной точки. Никаких гаданий, никаких "нестабильных   конфигураций". У каждой задачи - четкая начальная стабильная точка, что   позволяет фокусироваться на своих собственных изменениях.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Заставляйте создавать базовые конфигурации&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Создание   базиса - это наилучшая практика. Использование базовых конфигураций   займет&amp;nbsp; центральное место в вашей повседневной работе. Нет лучше способа   внедрить и закрепить практику, чем поставить её в центр всего рабочего   процесса.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Независимость задач&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Каждая   задача начинается с хорошо известной точки - с базовой конфигурации.   Поэтому задачи между собой не зависимы, кроме случаев, когда это нужно.   Этот простой факт дает большую гибкость. Взгляните на следующую  картинку  - как видите, она та же, что и в предыдущих примерах, только  на неё  добавили кружочки и стрелочки. Что же они значат? Каждая задача  связана с  предыдущей, но не функционально, а лишь порядком чекина.&lt;br /&gt;&lt;br /&gt;Почему   они связаны? Потому что на каждый чекин, если вы изменили один из  ранее  измененных файлов, вам придется сливать вместе изменения из  разных  задач. И даже если изменяли не те же файлы, всё равно  тестировались они  вместе, поэтому есть нечеткая зависимость. Такого  просто не бывает, если  вы используете ветку на задачу.&lt;br /&gt;&lt;br /&gt;Важно  отметить, что  при использовании веток усиливается весь процесс, ведь  вы выбираете -  что пойдет в следующий релиз (путем выбора веток для  слияния) вместо  того, чтобы брать всё, что есть на главной ветке.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_z6qpykplUvI/THaqxiTnSfI/AAAAAAAAA2s/HQna2GxA53g/s1600/tasksarelinked.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5509778962133764594" src="http://2.bp.blogspot.com/_z6qpykplUvI/THaqxiTnSfI/AAAAAAAAA2s/HQna2GxA53g/s400/tasksarelinked.png" style="cursor: pointer; display: block; height: 352px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Ветки как единица изменения&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Давайте   окунемся в глубины истории SCM: в начале не было никаких наборов   изменений и вся работа делалась пофайлово. Не было нормального способа   узнать какие изменения связаны с какой задачей, кроме ведения списков   файлов в системах отслеживания ошибок, навешивания меток или же записи   заметок об изменениях.&lt;br /&gt;&lt;br /&gt;Потом на сцену вышли наборы  изменений и жизнь стала налаживаться: теперь можно связать изменение  10474 с правками в запросе к БД. Зачастую система отслеживания запросов  на изменения может хранить ссылку на набор изменений и наоборот.  Проблема в том, что такой подход заставляет разработчика использовать  наборы изменений как атомарные единицы изменений, а это не очень удачная  идея. И вот почему: по определению набор изменений может содержать одну  версию каждого файла или директории - и что если вам надо сделать более  чем один чекин для одного файла по ходу работы над одной задачей? А  нельзя. Так что всё кончится тем, что чекиниться будете редко, а это  небезопасно. И это неправильно!&lt;br /&gt;&lt;br /&gt;Ну а потом появилось  следующее поколение систем SCM, которые могли правильно работать с  ветвлением и слиянием. Вот поэтому сейчас, вместе с Plastic, стало  возможным использовать ветки как нормальную единицу изменения. И ветки  не ограничены числом версий файла или директории - пожалуйста, делайте  коммиты так часто, как захотите!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Хватить распространять ошибки&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Люди,  имеющие отношение к опасным материалам, работают контролируемом  окружении, обычно за закрытыми дверями, для того, чтобы предотвратить  распространение катастрофических последствий, если таковые появятся. Мы  можем у них многому научиться.&lt;br /&gt;&lt;br /&gt;Взгляните на следующий  пример: Пэт (pat) вносит ошибку, и сразу же все, кто работают с главной  веткой, будут её затронуты. Нет разногласий, нет предотвращения, и  действия носят характер пост-фактум: вы ломаете код, потом чините, но  код всё равно ломается раньше.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_z6qpykplUvI/THaq85rBUkI/AAAAAAAAA20/yY4KdoEhv70/s1600/bugspreading-mainline.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5509779157384516162" src="http://1.bp.blogspot.com/_z6qpykplUvI/THaq85rBUkI/AAAAAAAAA20/yY4KdoEhv70/s400/bugspreading-mainline.png" style="cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 374px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Теперь  посмотрим на ситуацию с точки зрения "ветки на задачу". Ошибка всё  равно будет, однако у нас есть возможность среагировать прежде чем она  затронет главную ветку. Есть разногласия и есть стратегия по  предотвращению.&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5509779301508715954" src="http://4.bp.blogspot.com/_z6qpykplUvI/THarFSk6FbI/AAAAAAAAA28/tDQ9rFP_Puk/s400/bugcontention.png" style="display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 387px;" /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Улучшенное отслеживание&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Лучшее  подтверждение - на практике: взгляните на ветку task115. Вы знаете, что  это за задача в системе отслеживания запросов на изменения? Видимо,  115, да? Клёво. Есть связь. Достигнута полное отслеживание по шкале  CMMi. Проще и быть не может.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;После этого мы  уже можем реализовывать интеграции ещё клёвее (навроде того, что мы  делаем в Plastic), чтобы можно было дважды щёлкнуть на ветку и проверить  связанную задачу или же перейти к ней и проверить измененные файлы,  создать инспекцию кода и т.п.&lt;br /&gt;&lt;br /&gt;Но в самой  основе этого отслеживания лежит простое соглашение об именовании. Такого  вы не сделаете с подходами, основанными на наборах изменений или  использую разработку на главной ветке.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Закругляемся!&lt;/span&gt; &lt;br /&gt;&lt;h2&gt;&lt;/h2&gt;Длинная   получилась заметка!&lt;br /&gt;&lt;br /&gt;Надеюсь,  я смог изложить все идеи, которые у меня есть по поводу порядка работы и  по поводу того, как реализовать контроль версий с достаточно мощным  ветвлением и слиянием.&lt;br /&gt;&lt;br /&gt;Мы используем этот шаблон уже долгое время в хорошими результатами. Конечно же, мы &lt;a href="http://codicesoftware.blogspot.com/2010/03/branching-strategies.html"&gt;сочетаем разные шаблоны&lt;/a&gt;:  ветка на задачу используется для кратковременных (тактических) задач,  тогда как долговременные - такие как релизы с исправлениями ошибок,  новые линейки для техподдержки и т.п. - обычно ведутся на более  длительных по времени жизни (стратегических) ветках. Можете посмотреть  предыдущую статью по поводу &lt;a href="http://codicesoftware.blogspot.com/2008/04/integration-strategies.html"&gt;стратегий интеграции&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-2069316990321833785?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/2069316990321833785/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/09/branch-per-task-workflow-explained.html#comment-form' title='Комментарии: 44'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2069316990321833785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2069316990321833785'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/09/branch-per-task-workflow-explained.html' title='Развернуто об одной ветке на каждую задачу'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_z6qpykplUvI/TFrDxOeBk5I/AAAAAAAAA1E/0XLmUJTJRBk/s72-c/taskcycle.png' height='72' width='72'/><thr:total>44</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-8749100828309161856</id><published>2010-08-23T15:29:00.000-07:00</published><updated>2010-08-23T15:29:17.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='i fix'/><category scheme='http://www.blogger.com/atom/ns#' term='юмор'/><category scheme='http://www.blogger.com/atom/ns#' term='контроль версий'/><category scheme='http://www.blogger.com/atom/ns#' term='source control'/><title type='text'>О надежности систем контроля версий</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;И опять страничка юмора в бложике!&lt;br /&gt;&lt;a href="http://www.blogger.com/goog_1244992966"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://notinventedhe.re/on/2010-8-23/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="230" src="http://thiswas.notinventedhe.re/on/2010-08-23" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Взято из постоянно читаемого комикса &lt;a href="http://notinventedhe.re/"&gt;Not Invented Here&lt;/a&gt;, очень рекомендую.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-8749100828309161856?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/8749100828309161856/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/08/reliable-source-control.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8749100828309161856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8749100828309161856'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/08/reliable-source-control.html' title='О надежности систем контроля версий'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-2421904457542126584</id><published>2010-08-19T06:14:00.000-07:00</published><updated>2011-02-12T03:08:05.691-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='bugtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='Atlassian'/><category scheme='http://www.blogger.com/atom/ns#' term='JIRA'/><category scheme='http://www.blogger.com/atom/ns#' term='eventum'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><category scheme='http://www.blogger.com/atom/ns#' term='issue tracking'/><title type='text'>Пример выбора иструментов, или Как жить дальше?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Добрейшего.&lt;br /&gt;&lt;br /&gt;На своем опыте убеждаюсь, что вопрос  выбора инструментария может встать даже в устоявшихся проектах и  коллективах. А всё потому, что на основном месте работы сложилась  занятная ситуация с организацией и инструментами разработки. &lt;br /&gt;Есть  следующие команды разработчиков. Большая команда разработчиков -  назовем её Команда Ф (так оригинальнее). Есть маленькая команда  разработчиков (Команда Д). И есть я, пусть это будет Командой А (ничего  общего с тупым сериалом 80-х).&lt;br /&gt;Есть и другие команды -  техподдержка, дизайнеры, верстальщики, менеджеры, редакторы - но они нас  не интересуют в разрезе заметки.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Команда Ф использует  множество инструментов и является наиболее продвинутой в тройке. Имеет  централизованный контроль версий в SVN. Некоторые используют git. Для  багтрекинга используется автралийская &lt;a href="http://www.atlassian.com/software/jira/"&gt;Altassian JIRA&lt;/a&gt;. Кроме  того, есть развернутый инструментарий для юнит-тестирования и  функционального тестирования. Конечно же, есть и автоматика для  развертывания production-копий систем на рабочие площадки. Есть своя  Wiki.&lt;br /&gt;&lt;br /&gt;Команда Д - невелика по численности. Использует  общий SVN для контроля версий. Для багтрекинга используется Eventum  (ссылку не дам, ибо отстой). Также есть скрипты для деплоймента из SVN  на production-сервера. Осознавая необходимость документирования, была  запущена &lt;a href="http://www.mediawiki.org/wiki/MediaWiki"&gt;MediaWiki&lt;/a&gt; и в меру сил заполнена.&lt;br /&gt;&lt;br /&gt;Команда  А (то есть я) использует в работе SVN на локальной машине разработчика,  автоматизации нет, отслеживание задач было сделано в &lt;a href="http://37signals.com/"&gt;Basecamp&lt;/a&gt;. Не спрашивайте, как я  дошел до жизни такой... так уж получилось :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Задача&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Исторически  так сложилось, что команды мало пересекались в работе. Команда А, та  вообще находилась долгое время в другом офисе. Проекты разные, задачи  абсолютно разные, так что повода делать что-то совместное особого не  было.&lt;br /&gt;&lt;br /&gt;Но вот (здесь фанфары!) состав Команды А  изменился, а потом и территориально она стала находиться рядом с  остальными командами (а с Командой Д - так вообще за соседними столами).  Состав задач стал изменяться, стала появляться необходимость  использовать что-то более сложное, чем просто продвинутый to-do list,  коим является Basecamp. Появилась зависимость задач между собой.  Возникла необходимость подробного документирования. Началась постепенная  реорганизация кода приложений из-за его чрезмерного усложнения.&lt;br /&gt;&lt;br /&gt;Как  быть? Конечно, менять процесс и выбирать подходящие для него  инструменты. Поскольку я являюсь старым активистом антиброуновского  движения, вариант изобретать велосипеды отпал сам собой. Тратить время  на создание того, что уже давно создано - это верх расточительности.  Кроме того, я ещё и сторонник централизации, поэтому если какие-то  инструменты выбирать, то делать это надо с учетом того, что уже  используется другими двумя командами.&lt;br /&gt;&lt;br /&gt;Что делать?  Варианта два 1) взять используемые другими командами инструменты; 2)  выбрать инструменты самому и перевести на них другие 2 команды.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Решение&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Задача  разбивается на подзадачи: контроль версий, отслеживание задач (АКА  багтрекинг), документация, тестирование, развертывание.&lt;br /&gt;&lt;br /&gt;Самой  обособленной и простой задачей является &lt;b&gt;ведение и отслеживание  документации&lt;/b&gt;. В нашем случае её 2 вида - проектная документация и  генерируемая на основе комментариев. С комментариями всё просто - их  просто пишет по ходу написания кода, тут вопроса нет. Ну, разве что,  надо озадачиться и настроить автоматическую генерацию тем же &lt;a href="http://www.stack.nl/%7Edimitri/doxygen/"&gt;doxygen&lt;/a&gt;.&lt;br /&gt;С  проектной документацией тоже вопрос отпал сам собой - я просто создал  свои разделы в вики Команды Д и активно их пополняю. Причем, как обычно,  нет времени писать от начала и до конца, поэтому новые страницы создаю  по ходу работы над разными частями проекта. Закончил большую фичу -  описал. Затронул обособленную часть системы - написал про неё. Отправил  инструкцию кому-то из пользователей - вставил её в Вику, чтоб не  потерялась. Вот так и заполнил уже потихоньку половину от того, что  планировал.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Контроль версий&lt;/b&gt;. Вариант только один  - присоединиться к SVN одной из команд. Я не фанат Сабвершна, но ради  централизации приходится бить себя по рукам, чтобы не перейти на что-то  другое. В конце концов, типичные сценарии работ не очень сложны и SVN с  ними отлично справляется. Лучшее - враг хорошего, так что остановился на  хорошем решении. Вопрос только - к кому подключаться. Команда Д больше  подходит, т.к. их проект более связан с моим и есть даже небольшие  пересечения по общим данным. Так что в ближайшее время надо подключиться  к их репозиторию.&lt;br /&gt;Кроме того, раз возник повод, надо озадачиться  структурой репозитория. Текущая структура изначально была простой - trunk и бранчи, по одной на новую фичу. В дальнейшем появился ряд  больших проектов (у каждого - свой домен), поэтому просто ветки перестали  устраивать, надо подойти к вопросу более централизованно. Например, на  верхнем уровне репозитория обозначить директориями отдельные проекты, в нём - транк и его ветки.&lt;br /&gt;От  практики меток в том виде, в каком они используются в SVN, сознательно  откажусь. Во-первых, у проектов-сайтов отсутствует четкое различие между  релизами: доработали - обточили в "песочнице" - запустили для всех  посетителей - доработали в реальном времени по мелочи - отслеживаем  посещаемость и обратную связь. Текущая версия на trunk - это и есть &lt;a href="http://scm-notes.blogspot.com/2009/09/software-configuration-management_06.html"&gt;baseline&lt;/a&gt;  в его традиционном понимании, это то, что в данный момент видят  посетители, метить тут особо нечего.&lt;br /&gt;Во-вторых, меток в SVN  попросту нет, а значит, пользоваться нечем. :) То, что там есть - это их  имитация.&lt;br /&gt;В общем, директории под разные проекты и в них - транк и  ветки.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Отслеживание задач&lt;/b&gt; - это как раз вопрос,  из-за которого всё и началось. От системы issue-tracking мне нужно не  так уж много.&lt;br /&gt;Во-первых, гибкая настройка жизненного цикла работы  над записью. Ведь удобно для бага назначать свою цепочку состояний и  перехода ответственности, для новой фичи - свою. А для  обособленных задач типа прогона тестов - другую цепочку, включающую и  свой набор полей. Не такая это сложная вещь, однако у большинства систем  багтрекинга её нет, увы.&lt;br /&gt;Вторая особенность, которая бывает нужна  даже при одиночной разработке - связи между задачами. Нередки ситуации,  когда новая фича не может быть запущена, если не будут пофиксаны  несколько багов, назначенных на разных людей. При этом код активно  дорабатывается и над ним работает другой человек. Другой вариант -  исправленную ошибку надо протестировать перед выгрузкой, и задачу по  тестированию заводят отдельной записью. Понятно, что код нельзя  выгружать без тестов и надо обозначить, что задача по исправлению не  может быть закрыта без тестов. В общем, надо обозначить зависимости и  видеть текущие "showstoppers".&lt;br /&gt;Третья особенность, которую хочется  от любой системы - это простота и красота (которая зачастую кроется как  раз в простоте). Что тут скажешь - простая в использовании и красивая  система лучше тяжеловесной и страшной. GUI должен быть  web-based.&lt;br /&gt;Остальные фичи у большинства систем мало  отличаются, на них останавливаться не буду.&lt;br /&gt;&lt;br /&gt;Вообще,  если бы мне с нуля понадобилось выбирать систему bugtracking с зачатками  project  management, я бы лично вместо Джиры поставил или Redmine, или eTraxis. Был у  меня опыт выбора и пилотной эксплуатации системы трекинга с зачатками системы планирования на предыдущем месте работы - по итогу выбрал Рэдмайн,  остался сильно доволен и в дальнейшем его продолжила использовать вся  команда. Если же мне нужно было бы простое отслеживание ошибок или  управление задачами - то тут однозначно выбор бы пал на &lt;a href="http://scm-notes.blogspot.com/2009/10/etraxis-2x.html"&gt;eTraxis&lt;/a&gt;  - его я не просто активно использовал на крупном проекте, но даже успел потоптаться в исходниках :)&lt;br /&gt;&lt;br /&gt;Однако в наличии имеются Eventum и JIRA.  Будем смотреть, что есть хорошего в них.&lt;br /&gt;Eventum - отстреливается  сразу. Пункт первых моих пожеланий тут не выполняется - нельзя там гибко  настраивать жизненный цикл. Пункт два, про связи, также неосуществим.  Касательно простоты и красоты - всё ужасно. К тому же сопровождением системы уже несколько лет её хозяева не занимаются (к слову, это та же компания, которая создала широко известную в узких кругах СУБД MySQL ;) ). Глубоко копать не стал - раз  не подходит по функциональности, значит в топку.&lt;br /&gt;Вот JIRA  понравилась значительно больше. &lt;i&gt;Гибкость настройки&lt;/i&gt; - прекрасная.  Можно назначить разные жизненные циклы в любой конфигурации с указанием  разных полей для разных состояний. Кроме того, каждый жизненный цикл  имеет своё краткое название (Bug, Feature, Task) и для создания новой  записи пользователю можно из панели инструментов одним кликом сразу попасть на форму  подачи баги или другого запроса на изменения. &lt;i&gt;Связь между задачами&lt;/i&gt;  - в наличии, хотя и не без недочетов. К примеру, для создания  child-записи предлагается только создать запись с каким-то усеченным  жизненным циклом и для неё, в свою очередь, уже нельзя будет создать  свою дочернюю запись. Т.е. у первичной записи будет дочка, но вот внуков  она уже не увидит - и это плохо, как ни крути. Кроме того, начальную  запись можно закрыть, не дожидаясь закрытия дочерних, что странно, ведь  если на задаче висит внешняя зависимость, помимо самого выполнения, то  это повод не выпускать её из вида (закрытые записи - это первое, что  убирают пользователи, применяя фильтры). Помимо дочерних записей, можно  задать связи между записями вида "зависит от - задает зависимость для",  "следующий-предыдущий" и ещё несколько. Занятно, почему туда же не  включили тип связи "родительский-дочерний" вместо создания ущербных  подзаписей - было бы очень логично и единоообразно. В общем, пункт 2  моих хотелок выполняется, но с оговорками. Ну и &lt;i&gt;третья составляющая&lt;/i&gt;,  красота и простота, выполняется практически без оговорок. Интерфейс  приятный, всё понятно без инструкций (а может это просто я уже  насмотрелся на разное, вот и привык быстро вникать). Единственное  замечание - просмотр текущих задач и установка фильтрации. Для просмотра  задач, с которыми работаешь постоянно, требуется делать лишние  движения, выбирать фильтр и т.п. А вот в том же eTraxis всё проще -  логинишься и видишь текущий срез всех задач, которые касаются тебя (по  предварительно установленным фильтрам, понятно). Но это не та проблема,  из-за которой отказываются от продукта. Есть ещё один минус - система  платная, в отличие от большинства аналогов, которые в большинстве своём  open source. Странно, что это не остановило того, кто пилотировал  систему для команды перед её окончательным принятием в работу :) &lt;br /&gt;Итог  - подключился для пробного использования к JIRA Команды Ф.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Развертывание&lt;/b&gt;.  Здесь явных преференций нет, надо пробовать на практике подходы обеих  команд. Для начала попробую самый простой - развертывание из SVN с  помощью rsync. Use case простейший: всё, что надо залить на сервер,  коммитится в SVN, а затем синхронизируется с онлайном с помощью rsync.  На первых порах надо отучить себя работать с помощью привычного FTP  (помогут скиллы Сила воли и Битиё себя по рукам). Потом всё пойдет  проще.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Тестирование&lt;/b&gt;.  Поскольку из трёх команд только  команда Ф использует  автоматизированное&amp;nbsp; тестирование в каком-либо  виде, то перенимать  инструментарий надо будет у них. Поскольку  разработка во всех командах  ведется преимущественно на PHP, то инструменты  будут те же. Останется  "самая малость" - тесты написать на  существующие мегабайты кода :) &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Выводы&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Что же теперь надо сделать в ближайшее время, после предварительного анализа.&lt;br /&gt;1. Перенести репозиторий проектов в SVN Команды Д с одновременной переработкой структуры.&lt;br /&gt;2. Познакомиться с инструментарием развертывания от Команд Д и Ф и выбрать подходящий для проектов Команды А.&lt;br /&gt;3. Продолжить использовать Вики Команды Д.&lt;br /&gt;4. Ознакомиться с практиками тестирования Команды Ф. Выбрать то, что можно уже сейчас начать применять.&lt;br /&gt;5. Продолжить использования JIRA от Команды Ф. Далее - два варианта.&lt;br /&gt;5.1. Перейти на неё совсем. Убедить Команду Д перейти на неё же, потому что Eventum - это зло.&lt;br /&gt;5.2. Пропилотировать внедрение eTraxis с привлечением Команды Д - с последующим уходом от Eventum. Да, снова получится 2 инструмента на 3 команды, но это меньшее зло и это на тот случай, если Джира себя не покажет наилучшим решением.&lt;br /&gt;&lt;br /&gt;В общем, "Как будут развиваться события - покажет время" (с) Программа "Время"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S. &lt;a href="http://scm-notes.blogspot.com/2010/09/redmine.html"&gt;Решили внедрить Redmine&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-2421904457542126584?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/2421904457542126584/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/08/choosing-right-tool.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2421904457542126584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2421904457542126584'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/08/choosing-right-tool.html' title='Пример выбора иструментов, или Как жить дальше?'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-2017181026311050238</id><published>2010-08-03T05:18:00.000-07:00</published><updated>2010-08-03T05:19:49.789-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='Bzr'/><category scheme='http://www.blogger.com/atom/ns#' term='Bazaar'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='Hg'/><category scheme='http://www.blogger.com/atom/ns#' term='patch'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Git, Mercurial, Bazaar — работа с SVN и управление патчами</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Через Хабр набрел на статью &lt;a href="http://lib.custis.ru/DVCS_YAC"&gt;Сравнение DVCS - несколько задач&lt;/a&gt;. Рассматриваются популярные распределенные open source системы - Git, Hg, Bzr - с точки зрения работы через них с репозиториями SVN. Да, вот такая необычная постановка задачи.&lt;br /&gt;&lt;br /&gt;Автор исходит из того, что люди при попытке попробовать новую систему контроля версий в рамках текущей разработки, первое время могут использовать обе системы параллельно. Они могут конвертировать репозиторий в новый формат и работать с ним через нового клиента. Также можно попробовать синхронизировать изменения, которые делаются в исходном Сабвершне - и посмотреть, что из этого получится.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Статья получилась основательная и детальная - человек попробовал всё, о чем пишет, не поленившись списаться с разработчиками указанных систем.&lt;br /&gt;&lt;br /&gt;Кстати, если интересно почитать про Базаар из первых рук - тогда вам в блог &lt;a href="http://bzr-day.blogspot.com/"&gt;Базарный день&lt;/a&gt; , который ведет один из разработчиков этой системы. Ссылку дал автор в комментах к &lt;a href="http://habrahabr.ru/blogs/development_tools/100800/"&gt;заметке на Хабре&lt;/a&gt; - там, в свою очередь, есть адекватные комментарии по теме.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-2017181026311050238?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/2017181026311050238/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/08/git-mercurial-bazaar-svn.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2017181026311050238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2017181026311050238'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/08/git-mercurial-bazaar-svn.html' title='Git, Mercurial, Bazaar — работа с SVN и управление патчами'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-5353169476569258443</id><published>2010-07-25T15:40:00.000-07:00</published><updated>2010-10-28T20:24:17.933-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='change control'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><category scheme='http://www.blogger.com/atom/ns#' term='deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='promotion'/><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='antipatterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Neuma CM'/><category scheme='http://www.blogger.com/atom/ns#' term='product'/><category scheme='http://www.blogger.com/atom/ns#' term='stream'/><category scheme='http://www.blogger.com/atom/ns#' term='CM Journal'/><category scheme='http://www.blogger.com/atom/ns#' term='CM Crossroads'/><title type='text'>Листал подшивки CM Journal</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Не так давно решил пролистать все прошлые выпуски &lt;a href="http://www.cmcrossroads.com/cm-articles/cm-journal/"&gt;CM Journal&lt;/a&gt;, выпускаемые редколлегией сайта &lt;a href="http://www.cmcrossroads.com/"&gt;CM Crossroads&lt;/a&gt;. Узнать, так сказать, чем дышат корифеи и апологеты современного SCM. Итог - 3 интересные статьи.&lt;br /&gt;&lt;br /&gt;В целом я ожидал много интересного. Но, увы, в сборнике за 2 (два) с лишним года ежемесячных выпусков мне лично показались интересными только 3 (три) статьи. Остальные говорили или о вещах очевидных, или нужных, но только тезисно, или о злободневных, но декларативно, без конкретики. Очень много "воды" и рассуждений о космических кораблях на просторах Большого театра. Модное нынче направление agile-разработки точно также очень часто упоминается, но, опять-таки, конкретики очень мало. Периодически встречаются опечатки, сбившиеся буллиты в перечислениях, хромающее оформление - в общем, "написано профессиональными программистами".&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Из понравившегося.&lt;a name='more'&gt;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;a href="http://www.cmcrossroads.com/cm-articles/cm-journal/previous-editions/6858"&gt;Antipatterns of Change Control&lt;/a&gt; - &lt;b&gt;Антишаблоны контроля изменений&lt;/b&gt; - &lt;/span&gt;&lt;span style="color: black;"&gt;за авторством Mario Moreira. По сути - перепечатка 4-х "антипаттернов" из книги &lt;a href="http://www.amazon.com/Anti-Patterns-Patterns-Software-Configuration-Management/dp/0471329290"&gt;Anti-Patterns and Patterns in Software Configuration Management&lt;/a&gt;. Ситуации в статье взяты достаточно простые. Кто хоть раз сталкивался с командной разработкой или делал сколько-нибудь сложную систему, тот обязательно сталкивался в описанными примерами. Например, антишаблон "All Changes are Created Equal" ("Все изменения созданы равными" - аллюзия на цитату из американской конституции). Понятно, что у каждой задачи, а соответственно и изменения, есть свой приоритет и поправить баг, ломающий половину приложения - более важно, чем сделать небольшой клин-ап кода. Другие три антишаблона - примерно такие же.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Однако, сам подход интересен, появился повод прочитать ту самую книжку, которой Марио вдохновился.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;a href="http://www.cmcrossroads.com/cm-articles/cm-journal/previous-editions/12813"&gt;A pragmatic approach to Build and Deployment management&lt;/a&gt; - &lt;b&gt;Прагматичый подход к управлению релизами&lt;/b&gt;, автор - Mayank Gupta. Развернутый пример того, как по шагам навести порядок и внедрить SCM там, где о нём только слышали. Рассмотрена команда, где предыдущий СМщик ушел, оставив недоделки и вообще бардак. Соответственно, специалиста пригласили, чтобы хотя бы не пустить на самотек то, что уже было настроено. В итоге автор разобрался в состоянии дел и разработал план внедрения правильных практик, сделав упор на Continuous Integration. После чего начал план претворять в жизнь. Рассмотрен план работы и его разбиение на фазы.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Изрядная картина того, как надо наводить порядок и внедрять SCM. Мне понравилось.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;a href="http://www.cmcrossroads.com/cm-articles/cm-journal/previous-editions/12986"&gt;CM: The Next Generation of Branching Standards&lt;/a&gt;, автор Joe Farah. Джо ведет постоянную колонку в этом журнале, называется она "&lt;b&gt;CM: следующее поколение&lt;/b&gt;". В рамках этой серии и написана заметка "&lt;b&gt;Следующее поколение стандартов ветвления&lt;/b&gt;". Статья довольно большая, что нетипично для CM Journal, кроме того, заставляет малость подумать. Основная мысль автора - перейти от модели "&lt;i&gt;Файлы + Ветки + Метки&lt;/i&gt;" к "&lt;i&gt;Product + Stream [+Promotion Level]&lt;/i&gt;", то есть по сути выйти на уровень вверх, абстрагироваться от низкоуровневых операций. Разумеется, это невозможно без правильных инструментов. Сколько читал - всё ждал, ну когда речь зайдет о практическом применении. Из краткой информации об авторе выяснилось, что он никто иной, как Главный Перец в &lt;i&gt;Neuma Technology&lt;/i&gt;, выпускающий интегрированный продукт &lt;i&gt;Neuma CM+&lt;/i&gt;. И хоть прямых ссылок на него в тексте нет - думаю, именно он воплощает описанную технологию. Давно хотел с ним поработать, теперь появился ещё один повод. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Кстати, подобная абстракция, т.е. переход к более высокоуровневым концепциям в СМ, уже встречается в продуктах того же Rational - ранее это проявилось в UCM, теперь во всю применяется в Team Concert и Jazz. Ну и всяческие MS TFS и AccuRev тоже не отстают.&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;В общем, статью стоит прочитать, чтобы абстрагироваться от привычных вещей и взглянуть сверху на происходящее.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-5353169476569258443?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/5353169476569258443/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/07/cm-journal.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5353169476569258443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5353169476569258443'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/07/cm-journal.html' title='Листал подшивки CM Journal'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-6019072682936355379</id><published>2010-06-28T00:38:00.000-07:00</published><updated>2010-06-28T00:40:49.549-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='юмор'/><category scheme='http://www.blogger.com/atom/ns#' term='профессия'/><title type='text'>Пианист в борделе</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;В пору моей работы SCM-инженером в Мотороле меня периодически спрашивали, кем я работаю. Немедленно вспоминался следующий анекдот.&lt;br /&gt;&lt;br /&gt;В школе детей спрашивают - кем работают ваши папы?&lt;br /&gt;Кто-то говорит - бизнесменом, кто-то - военным, кого-то - строителем.&lt;br /&gt;Вовочка: "А у меня папа - пианист в борделе!"&lt;br /&gt;Учительница негодует и требует отца в школу. Тот приходит и выслушивает гневные тирады - "Как вам не стыдно такое ребенку рассказывать!".&lt;br /&gt;На что отвечает: "Понимаете, вообще я разработчик, пишу распределенные вычислительные системы под кластеры, но разве это объяснишь 10-летнему пацану?"&lt;br /&gt;&lt;br /&gt;Собственно, SCM-инженер в большой команде - из того же разряда. Слишком долго от начала до конца объяснять, чем же он занимается :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-6019072682936355379?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/6019072682936355379/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/06/piano-player-at-brothel.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6019072682936355379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6019072682936355379'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/06/piano-player-at-brothel.html' title='Пианист в борделе'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-2308146779729571779</id><published>2010-05-25T05:31:00.000-07:00</published><updated>2010-08-05T05:23:59.971-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etraxis'/><category scheme='http://www.blogger.com/atom/ns#' term='bullshit'/><category scheme='http://www.blogger.com/atom/ns#' term='bugtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='wave'/><category scheme='http://www.blogger.com/atom/ns#' term='issue tracking'/><title type='text'>Google Wave // как не надо делать багтрекинг</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Через старый уважаемый сайт набрел на статью на молодом гиковом сайте. В общем, на Хабре выложили пост про использование &lt;a href="http://habrahabr.ru/blogs/wave/94078/"&gt;Google Wave в качестве багтрекера&lt;/a&gt;, а на RSDN выложили на него &lt;a href="http://www.rsdn.ru/forum/management/3818927.flat.aspx"&gt;ссылку с комментариями&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Вкратце - есть команда 30 человек. Они использовали 5 лет Trac и заодно перепробовали кучу других тулов для управления задачами. Им нужен был инструмент, который позволил бы не только отслеживать задачу, но и как-то оперативно поддерживать весь поток сопутствующей информации - в первую очередь обсуждений в IM системы Jabber. В конце концов остановились на Google Wave - поскольку именно там они могут&amp;nbsp; теперь вволю трепаться о проекте и при этом там же вести информацию о задачах. Плюс ещё пару фишек разработали для Волны. Все жутко довольны, чего и всем советуют. Щастье всем даром и пусть никто не уйдет обиженным.&lt;br /&gt;&lt;br /&gt;Что тут скажешь: разруха - она в головах, а не в клозетах. Если в команде бардак и никто не хочет взять на себя труд остановить его и взять всё под какое-то подобие контроля - жди беды. Люди будут упорно вариться в этом броуновском движении и не будут упорядочивать свою работу, даже когда проект разрастется до сотни человек и понадобятся совсем другие механизмы работы.&lt;br /&gt;&lt;br /&gt;На RSDN автор высказался примерно в таком же ключе. Ну, и я его поддержал. Основные мысли:&lt;br /&gt;- для оправдания бардака люди будут пробовать всё новые тулзы, которые будут как-то помогать поддерживать любимый уровень энтропии;&lt;br /&gt;- делать из обсуждений задач полноценные артефакты процесса (т.е. присваивать обсуждению тикета статус отдельной самодостаточной единицы) - неправильно. Надо резюмировать результаты любых обсуждений и уже их аттачить в качестве комментариев к записям в системе трекинга;&lt;br /&gt;- подобная система не способна нормально структурировать работу, а также получать статистику и числовые показатели.&lt;br /&gt;Ну и не могу не процитировать камрада с RSDN:&lt;br /&gt;&lt;blockquote&gt;Управление проектом — это чёткое понимание в каждый момент времени, где ты находишься. Из того что я вычитал, там даже близко нет "управления". Есть группа людей, которая "just for fun" занимается какой-то деятельностью. Всё это будет продолжаться, пока у кого-то хватит терпения оплачивать этот фан. Потом их разгонят, на форумах будут сообщения — "была классная контора, но потом прогнила".&lt;/blockquote&gt;Как-то так, да. Вообще, некоторые основы отслеживания задач уже были мной высказаны в &lt;a href="http://scm-notes.blogspot.com/2009/09/scm.html"&gt;заметке про основы багтрекинга&lt;/a&gt;, так что рекомендую перечитать её и сравнить с обоими постами.&lt;br /&gt;&lt;br /&gt;Мой вывод: Google Wave (по крайней мере, предложенная реализация) не способен предоставить нужный уровень зрелости для отслеживания задач (багтрекинга) относительно большого проекта. Так что используйте что-то, что способствует применению правильных практик. Например, &lt;a href="http://scm-notes.blogspot.com/2009/10/etraxis-2x.html"&gt;eTraxis&lt;/a&gt; ;)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE&lt;/b&gt;: Собственно, предмет споров самоустранился:&lt;br /&gt;&lt;a href="http://googleblog.blogspot.com/2010/08/update-on-google-wave.html"&gt;http://googleblog.blogspot.com/2010/08/update-on-google-wave.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-2308146779729571779?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/2308146779729571779/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/05/google-wave.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2308146779729571779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/2308146779729571779'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/05/google-wave.html' title='Google Wave // как не надо делать багтрекинг'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-5709956594657419113</id><published>2010-05-13T03:41:00.000-07:00</published><updated>2010-05-13T03:41:54.600-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='системы контроля версий'/><category scheme='http://www.blogger.com/atom/ns#' term='VCS'/><category scheme='http://www.blogger.com/atom/ns#' term='юмор'/><category scheme='http://www.blogger.com/atom/ns#' term='сравнение'/><title type='text'>Если бы системы контроля версий были ...</title><content type='html'>Добрейшего. Страничка юмора в бложике!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Набрел через Хабр на заметку "&lt;a href="http://changelog.complete.org/archives/698-if-version-control-systems-were-airlines"&gt;If Version Control Systems were Airlines&lt;/a&gt;". Очень рекомендую, весьма забавно :)&lt;br /&gt;Кому английский не помеха - лучше оригинал прочитать, остальным можно почитать народный перевод - "&lt;a href="http://translated.by/you/if-version-control-systems-were-airlines/into-ru/"&gt;Если бы системы контроля версий были авиалиниями&lt;/a&gt;". &lt;br /&gt;&lt;br /&gt;Немедленно вспомнился мой пост на RSDN - "&lt;a href="http://www.rsdn.ru/forum/tools/2884712.aspx"&gt;Образное сравнение систем контроля версий&lt;/a&gt;", где разные системы контроля сравниваются с туалетами разных систем. Собсно, тоже рекомендую для посмеяться :)&lt;br /&gt;&lt;br /&gt;Have fun ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-5709956594657419113?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/5709956594657419113/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/05/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5709956594657419113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5709956594657419113'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/05/blog-post.html' title='Если бы системы контроля версий были ...'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-8187839130590310566</id><published>2010-04-19T05:46:00.000-07:00</published><updated>2010-06-23T04:28:09.634-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Конфигурационное управление'/><category scheme='http://www.blogger.com/atom/ns#' term='IEEE'/><category scheme='http://www.blogger.com/atom/ns#' term='SWEBOK'/><category scheme='http://www.blogger.com/atom/ns#' term='орлик'/><category scheme='http://www.blogger.com/atom/ns#' term='перевод'/><category scheme='http://www.blogger.com/atom/ns#' term='оригинал'/><title type='text'>SCM SWEBOK от IEEE - перевод и оригинал от Сергея Орлика</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Есть такая инициатива, называется она &lt;b&gt;Software Engineering Body of Knowledge&lt;/b&gt;. На русский это переводится примерно как Свод Знаний по Программной Инженерии. Создается он под эгидой &lt;a href="http://www.ieee.org/index.html"&gt;IEEE&lt;/a&gt; (&lt;b&gt;Institute of Electrical and Electronics Engineers&lt;/b&gt;, читается "ай-трипл-и"). Целью сбора подобного Свода является приведение к общему знаменателю знаний в программной индустрии. Результатом является &lt;b&gt;SWEBOK Guide&lt;/b&gt;, содержащий общепринятые стандартные термины, понятия и методы, прменимые к любым процессам разработки. Подробнее о том, что это и зачем всё это, можно &lt;a href="http://www.computer.org/portal/web/swebok/faq"&gt;почитать в FAQ&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Меня же интересовала глава 6, а именно "&lt;a href="http://swebok.sorlik.ru/6_software_configuration_management.html"&gt;Конфигурационное управление&lt;/a&gt;". Читал её ещё давно на английском (оригинал лежит &lt;a href="http://www.computer.org/portal/web/swebok/html/ch7"&gt;на сайте SWEBOK&lt;/a&gt;), много думал, как водится... А тут наткнулся на её перевод от &lt;a href="http://sorlik.blogspot.com/"&gt;Сергея Орлика&lt;/a&gt;. "Это повод!" - подумал я, и решил выложить сюда с парой комментариев.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Кто-то уже знаком с основами, данными в &lt;a href="http://scm-notes.blogspot.com/search/label/SCM"&gt;первых заметках&lt;/a&gt; этого блога и в &lt;a href="http://scm-notes.blogspot.com/search/label/RSDN%20Magazine"&gt;статьях по Основам SCM&lt;/a&gt;. Если так - вам однозначно будет интересно прочитать "так что же там дальше было?" Так вот - дальше идут различные стандарты, формализующие общие принципы управления конфигурациями (или "конфигурационного управления" в переводе Сергея). Если интересует что-то кроме того, как в любимой системе контроля версий отрастить веточку или что такое багтрекинг, то следующий шаг - это обязательно изучение стандартов. Особенно это касается менеджеров среднего и высшего звена - им подобные вещи обязательны к изучению, хотя бы для ознакомления.&lt;br /&gt;&lt;br /&gt;К слову, терминология в переводе несколько отличается от той, что дана в моих материалах, однако соответствия быстро находятся, т.к. все термины приведены также и на английском. Какая из них лучше - решать читателю. Скромно посоветую свою, выверенную редакторами RSDN Magazine ;)&lt;br /&gt;&lt;br /&gt;Итак, интересующимся - рекомендую.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-8187839130590310566?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/8187839130590310566/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/04/scm-swebok-ieee.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8187839130590310566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8187839130590310566'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/04/scm-swebok-ieee.html' title='SCM SWEBOK от IEEE - перевод и оригинал от Сергея Орлика'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-5674052277525497992</id><published>2010-04-08T19:21:00.000-07:00</published><updated>2010-11-02T16:12:49.864-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clearcase'/><category scheme='http://www.blogger.com/atom/ns#' term='config spec'/><category scheme='http://www.blogger.com/atom/ns#' term='merge'/><category scheme='http://www.blogger.com/atom/ns#' term='perforce'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='Plastic'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='selectors'/><category scheme='http://www.blogger.com/atom/ns#' term='Codice'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><title type='text'>Plastic SCM - распределение с человеческим лицом</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Набрел намедни на систему контроля версий &lt;a href="http://www.codicesoftware.com/xpfront.aspx"&gt;Plastic SCM&lt;/a&gt; от CodiceSoftware. Причем набрел случайно, рассматривая ещё пару относительно редких систем.&lt;br /&gt;В целом система очень понравилась. Получается нечто среднее между  Perforce, Mercurial и, как ни странно, ClearCase. Причем сильнее всего смахивает именно  на Perforce. Ниже - обо всех основных возможностях и о личных впечатлениях.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Ключевые возможности - следующие.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Распределенная природа работы.&lt;/b&gt; Многократно встречается утверждение, что Пластик - истинно распределенная система контроля. Центральный репозиторий имеет место быть, однако каждая рабочая станция может спокойно работать автономно, обмениваясь инфой как с серверами, так и с другими потребителями. Используется 2 механизма на выбор - репликации данных и обмен патчами. Рискну предположить, что в основе репликации лежит аналогичный механизм баз данных средствами back-end СУБД (но могу и ошибаться). С работой патчей тоже все, полагаю, знакомы. Причем обмениваться данными можно как угодно, например - реплицировать целиком отдельную ветку. Сервером при этом может являться даже машина разработчика. Краткая иллюстрация:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.plasticscm.com/img/screenshots/distributed-multisite.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="347" src="http://www.plasticscm.com/img/screenshots/distributed-multisite.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Выбор элементов&lt;/b&gt; для работы с помощью &lt;b&gt;"selectors"&lt;/b&gt;. Это одна из ключевых возможностей, на мой взгляд. Концепция явно взята из &lt;b&gt;ClearCase &lt;/b&gt;и &lt;b&gt;Perforce&lt;/b&gt;. В  конфигурационном файле пишется для каждого элемента (или группы  элементов): что выбирать (имя или маска для выбора), с какой ветки и  версии или по какой метке. Там также пишется - что делать при чекауте элемента (например, создать автоматом ветку). Надо посмотреть исходники с другой ветки для  группы файлов - меняется одна строчка, переустанавливается конфиг, дальше система  подбирает из репозитория правильные версии элементов - и юзер  продолжает работу (подбор новых версий и скачивание идет без его участия,  автоматом). По сути, происходит &lt;b&gt;выбор конфигурации продукта&lt;/b&gt; путем её (конфигурации) описания специальными правилами.  Это позволяет более гибко задавать срез версий, который хочет получить  пользователь. Такой подход более универсален, чем, например, просто номер  ревизии, т.к. интересующие  версии могут быть раскиданы по разным ревизиям репозитория. Здесь же можно в одном workspace видеть данные с разных веток одновременно. Вот небольшой пример селектора с одним правилом (их может быть неограниченное количество):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.codicesoftware.com/releases/manuals-html/UserGuide-EN_archivos/image172.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.codicesoftware.com/releases/manuals-html/UserGuide-EN_archivos/image172.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Возможности ветвления и слияния&lt;/b&gt;. Авторы считают, что надо уделять больше внимание отращиванию веток и их слиянию. Ведь именно плохая работа с branching и merge отпугивает народ в принципе от использования практик ветвления, что очень плохо (чему доказательством многочисленные войны на форумах). Создатели это понимают (и всячески это подчеркивают) - и делают всё, чтобы отращивание и слияние веток было как можно более простым. Механизм довольно интересен - с одной стороны, ветка отращивается для репозитория целиком, с другой - в неё "складываются" версии по мере появления для каждого элемента.&amp;nbsp; Слияние данных тоже не отстает по возможностям, оно там &lt;b&gt;трёхпозиционное&lt;/b&gt;, с поиском дельты через общего предка - я с таким работал в ClearCase, отличный механизм. Ну и до кучи - есть selective merge (cherry picking), это слияние не ветки целиком, а указанного диапазона версий (такое и в SVN есть); также есть subtractive merge (про этот вид &lt;b&gt;анти-слияния&lt;/b&gt; стоит отдельно потом написать заметку). Есть также 3D-просмотр дерева.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.codicesoftware.com/releases/manuals-html/UserGuide-EN_archivos/image021.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" src="http://www.codicesoftware.com/releases/manuals-html/UserGuide-EN_archivos/image021.gif" width="400" /&gt;&lt;/a&gt;&lt;a href="http://www.codicesoftware.com/releases/manuals-html/UserGuide-EN_archivos/image023.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="314" src="http://www.codicesoftware.com/releases/manuals-html/UserGuide-EN_archivos/image023.gif" width="400" /&gt;&lt;/a&gt;&lt;a href="http://www.codicesoftware.com/releases/manuals-html/UserGuide-EN_archivos/image027.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.codicesoftware.com/releases/manuals-html/UserGuide-EN_archivos/image027.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span id="goog_269383687"&gt;&lt;/span&gt;&lt;span id="goog_269383688"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Переносимость.&lt;/b&gt; Заявляется кроссплатформенность (Windows, Linux,  Solaris, MacOS), в качестве back-end используются разные СУБД. В  частности, не так давно был заявлен Oracle в качестве ещё одной  поддерживаемой базы. Требует .NET 2.0 - то есть или соответствующий фреймоврк под виндами, или Mono.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Интерфейс.&lt;/b&gt; Имеется родной GUI-клиент, есть интеграция с Visual Studio, Eclipse,  JDeveloper. Есть и консольный клиент. Но основной упор  делается на удобство родного клиента - вплоть до 3-хмерного просмотрщика  истории элемента (веток, версий, меток и т.п.). &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Интеграция с багтрекерами.&lt;/b&gt; В настройках клиента указаны Bugzilla, Jira, Mantis, Trac и ещё несколько других. На картинках в доках видно, что есть привязка задач к веткам, что логично и очень правильно.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Система запросов.&lt;/b&gt; Можно сделать поиск по куче критериев - элементов, бранчей, меток и т.п. - и выбрать для просмотра то, что надо. По сути, свой небольшой язык запросов. При разветвленной структуре проекта, да ещё и при большом количестве разработчиков и их веток - очень полезная штука.&lt;br /&gt;&lt;br /&gt;Есть много других фишек, например, ряд вещей, связанных с безопасностью или сбор метрик по работе с кодом.&lt;br /&gt;&lt;br /&gt;В целом же привлекла внимание наиболее интересная фича - selectors. Как уже было сказано, она сильно напоминает config specs у ClearCase и аналогичный механизм у Perforce. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Пощупал&lt;/b&gt;&lt;br /&gt;Итак, думаю, надо скачать демку и пощупать. Зарегался на сайте сначала, но потом саму закачку решил отложить - инсталятор 50 мег, а инет дома оставляет желать лучшего в вечерние часы. В общем, не стал качать, потом был занят.... И тут - письмо, пишет их продажница. Мол, Юрец, ты у нас тут по сайту ходил, решила узнать - мож тебе помощь какая нужна?&lt;br /&gt;В общем, понятно - работа с потенциальным клиентом, молодцы, зачёт.&lt;br /&gt;Не удержался - скачал на работе. Поставил, получил ошибку при настройке способов аутентификации между клиентом и сервером, списался с суппортом, на следующий день (разница во времени...) получил совет как победить (граждане, читайте мануалы!). Суппорту - ещё один зачет, молодцы. "....А вы все здесь - маладцы!" (с) День радио. :)&lt;br /&gt;&lt;br /&gt;В общем, запустил. Сайт и мануал - не обманули, всё работает как описано и нарисовано на картинках. &lt;br /&gt;Работа с ветками, метками и историей элементов - вполне понятна и не  вызывает отторжения. По крайней мере, короткого User manual мне хватило  чтобы сразу сделать всё что надо.&lt;br /&gt;&lt;br /&gt;Selectors работают как заявлено - имея несколько отращенных веток свободно указывал несколько в селекторе и элементы действительно выбирались по нескольким веткам. Ветки растятся, метки вешаются, мёржи сливают, конфликтные ситуации ловятся. Приятный редактор диффов и слияний.&lt;br /&gt;Репликации также работают нормально - получилось создать 2 репозитория на сервере и за-push-ить между ними пару веток. При этом машина разработчика становится сама сервером (работает по 8084 порту).&lt;br /&gt;Интеграцию с багтрекерами не проверял, т.к. пользуюсь &lt;a href="http://code.google.com/p/etraxis/"&gt;eTraxis&lt;/a&gt;, который они не поддерживают ;)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Особенности.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Все операции над объектами - элементами, ветками, метками делаются мышкой через контекстное меню, никаких кнопок на тулбаре нет, горячих клавиш нет. Для частого использования (например, интеграторами) это будет геморрой и для больших объемов работы - GUI-клиент  противопоказан, надо использовать командную строку. Кстати, в некоторых других тулзах гуёвые операции сопровождаются  консольным  выводом - это бывает полезно - здесь же этого также нет, увы.&lt;br /&gt;&lt;br /&gt;Сам по себе GUI - очень неплох, приятен и вообще даже местами красив. Сделал небольшое дерево веток с версиями в 3D-просмотрщике, получилось малость непонятно, но очень прикольно :) Кстати, желающие могут просмотреть историю изменений через &lt;a href="http://scm-notes.blogspot.com/2009/11/gource.html"&gt;Gource&lt;/a&gt; - об этом подробно &lt;a href="http://codicesoftware.blogspot.com/2010/04/gource-for-plastic-scm.html"&gt;написано в их блоге&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Итого&lt;/b&gt;&lt;br /&gt;Хороший продукт, мне понравился, попробую поработать с ним в рабочем режиме.&lt;br /&gt;Любителям попробовать что-то новое - качать и ставить обязательно.&lt;br /&gt;Ностальгирующим по P4 или ClearCase (типа меня) - рекомендую настоятельно.&lt;br /&gt;Любители распределенных систем - попробуйте, расскажите насколько модель  работы Пластика плоха/хороша по сравнению с вашими тулзами.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ссылки&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.codicesoftware.com/xpfront.aspx"&gt;Официальный сайт&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codicesoftware.com/opevalresources2.aspx"&gt;Документация&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codicesoftware.com/opevalresources2/xpcustomers.aspx"&gt;Список клиентов со ссылкой на отзывы&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-5674052277525497992?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/5674052277525497992/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/04/plastic-scm.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5674052277525497992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5674052277525497992'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/04/plastic-scm.html' title='Plastic SCM - распределение с человеческим лицом'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-1833027684515899183</id><published>2010-03-30T06:17:00.000-07:00</published><updated>2010-04-19T05:22:55.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='win2000'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='sourcedepot'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration management'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>Windows. A Software Engineering Odyssey</title><content type='html'>Добрейшего. &lt;br /&gt;&lt;br /&gt;В &lt;a href="http://scm-notes.blogspot.com/2010/03/scm-microsoft.html"&gt;предыдущем посте&lt;/a&gt; я упоминал Майкрософт и политики управления конфигурациями, которую они использовали для разработки Windows. Нашел презентацию от одного из инженеров, работавшим над Windows 2000 - Марка Луковского - где примерно &lt;b&gt;половина &lt;/b&gt;материала касается непосредственно системы контроля версий и обеспечения параллельности разработки. Считаю, познавательный материал. Ниже - сама презентация и некоторые мысли.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Захотите посмотреть на полный экран - жмите Full.&lt;br /&gt;&lt;div id="__ss_3518192" style="width: 425px;"&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=lucovsky-100322210225-phpapp02&amp;stripped_title=windows-a-software-engineering-odyssey-3518192" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=lucovsky-100322210225-phpapp02&amp;stripped_title=windows-a-software-engineering-odyssey-3518192" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;В общем, какие, с моей точки зрения, важные моменты я увидел.&lt;br /&gt;Наследство от Win NT 3.1 досталось веселое - строгая подчиненность; все работают на одной ветке (другие не позволяет система); жесткая связь процесса выпуска билда системы и его тестирования; ломает один разработчик - починки ждут 1400 разработчиков и вся команда из 5000 голов. Надо было что-то делать. В первую очередь - разбивать всё на более мелкие составляющие&amp;nbsp; - более мелкие команды; менять систему контроля версий; автоматизировать отстройку.&lt;br /&gt;&lt;br /&gt;В результате взяли SourceDepot (доработанный Perforce) и перекочевали на неё "на живую", по ходу работы. Параллельно работала SLM (предыдущая система контроля версий) и шла миграция на SourceDepot, причем попутно менялась сама структура исходников проекта. Представить только как полторы тысячи человек (постепенно это число выросло до &lt;b&gt;5100 человек&lt;/b&gt;) перетаскивают всю эту уйму кода, попутно жонглируя им в совершенно другие структуры (а число файлов постепенно выросло до &lt;b&gt;411 тысяч файлов&lt;/b&gt;) - жутко интересно становится, во что оно им стало по времени и нервам...&lt;br /&gt;&lt;br /&gt;С внедрением новой системы стало возможным вести полноценные ветки - для подпроектов, отдельных компонентов и фич. Это же позволило более гибко подойти к вопросу об отстройке промежуточных результатов - ведь теперь можно было пробовать любые решения у себя на ветках, отстраивать их там и не стопорить работу всей команды. Учитывая, что у каждой команды были свои мощности для отстройки и тестирования, думаю, они все вздохнули с облегчением. Вообще, автоотстройке уделялось много внимания и процесс постепенно отладился до автобилдов дважды в сутки с рассылкой автоуведомлений.&lt;br /&gt;&lt;br /&gt;В общем, за 10 лет работы процесс работы изменился полностью, превратившись из поделки на коленках у небольшой команды - в огромный отлаженный механизм.&lt;br /&gt;&lt;br /&gt;Народ спорил, что такое же можно было бы сделать с помощью любой распределенной системы. Наверное, не спорю. Не забывайте, что по состоянию на то время из распределенных систем был разве что BitKeeper, да и сама концепция распределенных систем была для знакома лишь гикам-разработчикам Линукса. Да и, судя по всему, им требовалась какая-никакая централизация и разделение труда, ведь команда быстро растет и устраивать хаос на ровном месте руководству совсем бы не захотелось. Как именно работала централизация - опять же, читайте предыдущую &lt;a href="http://scm-notes.blogspot.com/2010/03/scm-microsoft.html"&gt;статью про применение SourceDepot&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Так что работали с тем что есть и сработали на отлично. И система получилась весьма неплохой, и процесс работы вышел полностью отвечающий всем требованиям. Инструменты - это всего лишь инструменты. Сами по себе они ничего не дадут, нужен мастер для их "оживления". В описанном случае видно, что инструмент не просто подобрали из того, что было, а фактически  сделали на заказ, ручной работы получился, заточенный под руку и хват мастера.&lt;br /&gt;&lt;br /&gt;Так что грамотные правила совместной работы, поддерживаемые инструментарием - это отличная комбинация.&lt;br /&gt;&lt;br /&gt;P.S. И, конечно же, привет противникам ветвления ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-1833027684515899183?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/1833027684515899183/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/03/windows-software-engineering-odyssey.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/1833027684515899183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/1833027684515899183'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/03/windows-software-engineering-odyssey.html' title='Windows. A Software Engineering Odyssey'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-7165651076726485719</id><published>2010-03-27T06:14:00.000-07:00</published><updated>2010-07-28T23:28:48.180-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cyclic dependencies'/><category scheme='http://www.blogger.com/atom/ns#' term='perforce'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='sourcedepot'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='components'/><title type='text'>Немного об SCM в Microsoft</title><content type='html'>&lt;span style="color: black;"&gt;Добрейшего.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;На RSDN в ходе дискуссии кинули ссылкой на  &lt;a href="http://moishelettvin.blogspot.com/2006/11/windows-shutdown-crapfest.html"&gt;заметку, датированную 2006 годом&lt;/a&gt;, написанную бывшим сотрудником  Microsoft. &lt;br /&gt;Мойша  (автор) писал, в основном, касательно бюрократии, царившей в конторе,  на примере работы над своей фичей. В довесок было также упомянуто  вскользь о политиках контроля версий и о том, как они добавляли  неповоротливости в и без того неповоротливый механизм. Ниже -  оригинальный текст и некоторые выводы из прочитанного.&lt;/span&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;In  Windows, this model &lt;span style="color: #999999;"&gt;[централизованного репозитория - прим. ред.]&lt;/span&gt; breaks  down simply because there are far too many developers to access one  central repository. So Windows has a tree of repositories: developers  check in to the nodes, and periodically the changes in the nodes are  integrated up one level in the hierarchy. At a different periodicity,  changes are integrated down the tree from the root to the nodes. In  Windows, the node I was working on was 4 levels removed from the root.  The periodicity of integration decayed exponentially and unpredictably  as you approached the root so it ended up that it took between 1 and 3  months for my code to get to the root node, and some multiple of that  for it to reach the other nodes. It should be noted too that the only  common ancestor that my team, the shell team, and the kernel team shared  was the root.&lt;/blockquote&gt;&lt;br /&gt;Итак, у них иерархия репозиториев.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;В корневом  лежит наиболее стабильная рабочая версия системы, которая имеет  определенные версии входящих в неё подсистем (hardware, core, UI и  т.п.). Это 1 уровень.&lt;/li&gt;&lt;li&gt;Каждая подсистема разрабатывается в своём  репозитории. Из корня берется послденяя доступная версия системы и от неё идет разработка. В "корень" отправляются лишь стабильные версии подсистемы путем репликации (или же хитрой миграции). Это уровень 2.&lt;/li&gt;&lt;li&gt;Подсистемы состоят из компонент - и для каждой тоже есть свой  репозиторий, с копией последней стабильной подсистемы (и какой-то версией всей операционки). Это уровень 3. В нём компонент созревает и периодически  отдается в подсистему уровнем выше.&lt;/li&gt;&lt;li&gt;Последний, 4-й уровень,  содержит наименьшие атомарные модули (с разной свежести версиями подсистем, компонент и т.п.) и отдает результаты работы на 3-й  уровень.&lt;/li&gt;&lt;/ul&gt;Вот и получается, что для того, чтобы код конечного  разработчика попал от него в корень (т.е. в код операционной системы) - он интегрируется сначала в  компонент, проверяется, потом в подсистему, снова проверяется, а затем  уже в код системы. И чтобы разработчику получить для работы последнюю  стабильную версию системы, ему надо дождаться, пока пройдет обратная  миграция кода (propagate, "пропагейт") - от корня к конечному  репозиторию. Что ж, есть в этом своя логика. Жаль, что переходы между  уровнями шли так долго.&lt;br /&gt;&lt;br /&gt;Кстати, немедленно вспомнилась моя же  &lt;a href="http://scm-notes.blogspot.com/2009/09/software-configuration-management_06.html"&gt;заметка про основы СМ и базовые конфигурации&lt;/a&gt;. А именно - фрагменты с  картинками о компонентах, суперкомпонентах и продуктах. Только у МС всё  значительно сложнее.&lt;br /&gt;&lt;br /&gt;Есть ещё сложности при таком сценарии, про  них писали в комментах - с циклическими зависимостями. Если модуль А  зависит от модуля Б, и Б зависит от А, и кроме того, они находятся в  разных репозиториях это значит, что:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;для разработки, отладки и  предварительного тестирования надо иметь в одном из репозиториев  результаты обеих модулей, т.е. сделть модуль А, дождаться реплики на  ноду выше, дождаться пропагейта из ноды - "вниз" к модулю.&lt;/li&gt;&lt;li&gt;в  продукт или подсистемы выше уровнем надо подавать на интеграцию  изменения параллельно.&lt;/li&gt;&lt;/ol&gt;Вообще, управление зависимостями - задача  очень нетривиальная. И будь это всё в одном центральном репозитории -  проблем бы вообще не стояло. Но тут - иерархия, приходится как-то крутиться.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Итог &lt;/b&gt;такой организации работы: изменения проходили  снизу вверх и обратно очень долго, месяцами - и это очень плохо.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Комменты&lt;/b&gt;&lt;br /&gt;Само  собой, комментов - раскинулось море широко. Большая часть -  высказывания про саму фичу, но мне же показалась интересной следующая  инфа:&lt;br /&gt;&lt;blockquote&gt;The current source code management setup in Windows was  introduced by Mark Lucovsky (him who Ballmer threw a chair at when he  announced he was joining the big G). The VCS is called SourceDepot and  it's a modified version of Perforce.&lt;/blockquote&gt;В общем, при работе над  Вистой (как, наверное, и при работе над более ранними версиями)  использовали систему контроля версий, именуемую СорсДипо. Она является  разновидностью Perforce (P4, Перфорс), проприетарной системы контроля  версий. Мне довелось работать с ним немного плюс слышал от коллег  разное. В общем, да, выбор неплохой. Надо полагать, Перфорс доработали  для Майкрософт именно в сторону распределения репозиториев. Не путать с  распределением всей системы контроля версий - всё-таки Перфорс является  централизованной системой контроля и репликация репозиториев ещё не  делает её "гитом". Кстати, некоторые возможности, вроде аналога конфигспеков, делают её приближенной по возможностям к ClearCase.&lt;br /&gt;&lt;br /&gt;Так-то так.&lt;br /&gt;Интересно было бы узнать, используют  ли в МС по-прежнему СорсДипо (заметка Мойши ведь от 2006 года) или уже полностью перешли на TFS даже для  создания Windows? По крайней мере, &lt;a href="http://scm-notes.blogspot.com/2009/11/ms-tfs-branching-guidance.html"&gt;руководства по TFS-ному СМ&lt;/a&gt; они пишут во  всю.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P.S.&lt;/b&gt; На отдельной странице собраны ссылки на &lt;a href="http://scm-notes.blogspot.com/p/software-configuration-management.html"&gt;статьи по основам контроля версий&lt;/a&gt; и вообще управлению конфигурациями.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-7165651076726485719?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/7165651076726485719/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/03/scm-microsoft.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7165651076726485719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7165651076726485719'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/03/scm-microsoft.html' title='Немного об SCM в Microsoft'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-8982245334472889269</id><published>2010-03-25T23:59:00.000-07:00</published><updated>2010-04-08T19:39:26.646-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='merge'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='linus'/><category scheme='http://www.blogger.com/atom/ns#' term='torvalds'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><category scheme='http://www.blogger.com/atom/ns#' term='transcript'/><title type='text'>git presentation by Linus Torvalds - для коллекции</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Прежде чем писать про новые системы контроля версий (да, про них заметки на подходе), надо бы подбить имеющуюся информацию о существующих.&lt;br /&gt;Апологеты git и вообще распределенных систем контроля версий часто ссылаются на речь Линуса Торвальдса в рамках Google TechTalk, где он описывает своё детище - git. Именно с неё, насколько помню, началась экспансия git на рынок систем контроля версий.&lt;br /&gt;Кто бы как не относился в распределенной модели, а знать первоисточники надо.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Читаем &lt;a href="https://git.wiki.kernel.org/index.php/LinusTalk200705Transcript"&gt;стенограмму самой речи&lt;/a&gt; на английском. Не все понимают живую английскую речь - читать им будет удобнее. Ссылок на многочисленные переводы не дам, не буду баловать, учите английский, оригиналы рулят.&lt;br /&gt;У кого английский получше - смотрим длинное видео. Линус, как известно, финн, так что английский там несложный.&lt;br /&gt;&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4XpnKHJAok8&amp;hl=ru_RU&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4XpnKHJAok8&amp;hl=ru_RU&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Кстати кто ещё не читал - заметка про &lt;a href="http://scm-notes.blogspot.com/2009/11/dvcs-cm-git.html"&gt;политики контроля версий с использованием git&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-8982245334472889269?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/8982245334472889269/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/03/git-presentation-by-linus-torvalds.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8982245334472889269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8982245334472889269'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/03/git-presentation-by-linus-torvalds.html' title='git presentation by Linus Torvalds - для коллекции'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-7647883703985704429</id><published>2010-02-27T06:11:00.000-08:00</published><updated>2010-02-27T06:28:28.531-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clearcase'/><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='bullshit'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><category scheme='http://www.blogger.com/atom/ns#' term='version'/><category scheme='http://www.blogger.com/atom/ns#' term='VersionControlTools'/><category scheme='http://www.blogger.com/atom/ns#' term='control'/><category scheme='http://www.blogger.com/atom/ns#' term='fawler'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='фаулер'/><title type='text'>Критика VersionControlTools Фаулера</title><content type='html'>Добрейшего.&lt;br /&gt;&lt;br /&gt;Перефразирую советскую классику: "А не замахнуться ли нам на Мартина нашего, понимаете ли, Фаулера?". Ну, просто набрел сегодня на свежую статью от означенного автора и зацепил меня заголовок "&lt;a href="http://martinfowler.com/bliki/VersionControlTools.html"&gt;VersionControlTools&lt;/a&gt;". Да, в оригинале тоже слитно, Вики уже прям надиктовывает названия статей.&lt;br /&gt;&lt;br /&gt;Так вот, увидев ключевое слово, не смог пройти мимо. Прочитанное, мягко говоря, разочаровало. Приведу несколько значимых для меня пунктов и цитат.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;1. Рассуждая о стОящих системах контроля версий, автор не заморачивается ознакомлением с большинством из имеющихся. Для рассмотрения берутся традиционные SVN, git, Mercurial. Про остальные говорится, что в них нет или capability, или visibility. Т.е. остальные или хиленькие, или малораспространённые. Кто же попадает в эти категории? В первую очередь, &lt;strong&gt;IBM Rational ClearCase&lt;/strong&gt; и &lt;strong&gt;Microsoft Team Foundation Server&lt;/strong&gt; ("Two in particular generate a lot of criticism"). В сад также отправляются Perforce, Bazaar и MS VSS (этого - поделом, надо сказать). Причина?&lt;br /&gt;&lt;blockquote&gt;I will, at least for the moment, leave it with the fact that developers I respect have worked extensively with, and do not recommend, these products.&lt;/blockquote&gt;"Пацаны сказали - западло". Точнее, "Пастернака не читал, но осуждаю". Ну и ещё автор слышал о каких-то просто bizarre вещах, которые вытворяли разрабочики, используя эти тулы. Ну прям отбивает желание не то что пробовать эти системы, но даже даже читать про них, не правда ли?&lt;br /&gt;&lt;br /&gt;2. Далее идет выбор между централизованной и децентрализованной (распределенной)&amp;nbsp;моделью. Или вам нужна централизация,тогда SVN - ваш выбор, или децентрализация - тогда будет ещё одна развилка - git/Hg. Далее идет разбор плюсов и минусов обеих моделей. Точнее даже не моделей, а просто SVN и&amp;nbsp;всего DVCS. Причем после короткой прилюдии у Subversion рассматриваются только минусы: распределенные системы быстрее на операциях с локальным репозиторием, они могут эффективно работать без наличия сети... И ещё один минус: оказывается, в распределенных системах вы можете гадить в локальный репозиторий сколько угодно и весь этот стыд не будет никому доступен, пока вы сами не выдадите его миру... а в SVN - все видно, даже те ветки, код на которых строиться не будет (увидят - засмеют!). В общем, первые 2 причины засчитываются, третья является просто следствием странного представления о стыде и его видимости.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Отдельно автор остановился на ветвлении (branching). По его мнению&lt;br /&gt;&lt;blockquote&gt;... the argument against a DVCS, that it encourages wanton branching, that feels good early on but can easily lead you to merge doom.&lt;/blockquote&gt;Т.е. развратное ветвление приводит к непонятно хаосу во время слияния (merge doom).&lt;br /&gt;&lt;br /&gt;Причем!&lt;br /&gt;&lt;blockquote&gt;... reckless branching isn't something that's particular to one tool. I've often heard people in ClearCase environments complain of the same issue.&lt;/blockquote&gt;Т.е. необоснованное бранчевание - это прям беда многих тулов и поговаривают, что в КлирКейсе та ж самая задница!&lt;br /&gt;&lt;br /&gt;Что тут скажешь... многие команды вообще только-только начинают понимать, что отращивание бранчей - это хорошо и этого не надо бояться. А тут уже 2 шага вперед - все так и норовят сделать лишний десяток веток, по рукам не успеваем давать! В общем, странное заявление. NB: Ветвиться можно и нужно.&lt;br /&gt;К слову, о ClearCase. Там ветвление вообще делается почти прозрачно для пользователя. Достаточно в правилах текущего представления репозиториев сказать - "при чекауте вот этих элементов автоматически создать ветку такую-то и сделать эту ветку рабочей для указанного элемента". Что и происходит. Девелопер лишь делает чекаут элемента - автоматом создается ветка и работа идет уже на ней. Причем таких автоветок можно делать любое количество и их содание будет происходить прозрачно.&lt;br /&gt;Reckless, говорите... ну-ну...&lt;br /&gt;&lt;br /&gt;4. Далее идет сравнение распределенных&amp;nbsp;Hg и git. Тут встреча проходит на равных, в конце мачта - ничья, а Mercurial выигрывает по буллитам... ну, просто Фаулер использует именно его и всё тут. Принципиальных отличий нет.&lt;br /&gt;&lt;br /&gt;5. Предлагается рассмотреть вариант с использованием сразу двух систем контроля версий. Конечно, упоминается git-svn. Делается вывод, что иногда можно и так, особенно если начальство навязывает одну систему, а команда подпольно юзает что-то другое, сливая в навязанную систему лишь большими кусками. В общем-то, был у нас подобный пример на одном проекте - использовали SVN и ClearCase... Я там не работал, но разработчикам нравилось. А сколько было геморроя интегратору... это знает только он. Хотя, человек тварь живучая, ко всему привыкает и даже начинает получать от неудобств особенное удовольствие.&lt;br /&gt;&lt;br /&gt;По мне - так на здоровье, хоть 3 системы. Главное тут -&amp;nbsp;как это организовать, а ещё важнее - как поддерживать в работающем состоянии, без отката к хаосу.&lt;br /&gt;&lt;br /&gt;6. Ну и под конец следует вывод, ради которого можно было и не читать всю статью, а проскроллить вниз, ибо истину говорит:&lt;br /&gt;&lt;blockquote&gt;often its the practices and workflows that make a bigger difference&lt;/blockquote&gt;Т.е. неважно, какой инструмент ты используешь, главное - использовать его правильно, эффективно и желательно по прямому назначению.&lt;br /&gt;&lt;br /&gt;В целом, вся статья - много слов о простых истинах и собственных домыслах.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Сухой остаток&lt;/strong&gt;: ничего нового; читать рекомендую только ценителям истинного SCM (при наличии иммунитета), евангелистам DVCS и фанатам Фаулера.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-7647883703985704429?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/7647883703985704429/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/02/versioncontroltools.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7647883703985704429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/7647883703985704429'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/02/versioncontroltools.html' title='Критика VersionControlTools Фаулера'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-5589632934576857266</id><published>2010-02-04T15:58:00.000-08:00</published><updated>2010-02-14T18:28:13.027-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linkedin'/><category scheme='http://www.blogger.com/atom/ns#' term='пафос'/><category scheme='http://www.blogger.com/atom/ns#' term='bad CM'/><category scheme='http://www.blogger.com/atom/ns#' term='life and death'/><title type='text'>О важности CM</title><content type='html'>На проводе Stephen Nuchia, Founder at J-BIRD Search and Rescue:&lt;br /&gt;&lt;blockquote&gt;A childhood friend of mine was killed fighting a fire in 2001 and I just recently read the official report on his death. Poor CM turns our to have been one of the three mistakes that killed him. The maintenance procedures being used for his breathing apparatus didn't match the model of equipment issued. Does CM matter? It does to me.&lt;/blockquote&gt;via &lt;a href="http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers&amp;amp;discussionID=13245792&amp;amp;gid=63331&amp;amp;commentID=11370906&amp;amp;trk=view_disc"&gt;LinkedIn&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-5589632934576857266?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/5589632934576857266/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/02/cm.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5589632934576857266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5589632934576857266'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/02/cm.html' title='О важности CM'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-296893637419936550</id><published>2010-02-03T20:15:00.000-08:00</published><updated>2010-02-03T20:27:05.619-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='merge'/><category scheme='http://www.blogger.com/atom/ns#' term='слияние'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel development'/><category scheme='http://www.blogger.com/atom/ns#' term='cmcrossroads'/><title type='text'>Статья про слияние изменений (merge)</title><content type='html'>Набрёл сегодня на небольшую статью под названием "&lt;a href="http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/"&gt;Who’s afraid of the big bad merge?&lt;/a&gt;" ("Кто боится большого и страшного Мёржа?") Речь идет о слиянии (merge) исходников между ветками по время параллельной разработки.&lt;br /&gt;&lt;br /&gt;Из вступления:&lt;br /&gt;In this post I will take a look at some of the issues that arise from managing parallel development and, perhaps more importantly, provide some guidance on how to avoid the pitfalls of parallel development.&lt;br /&gt;что означает примерно следующее: "О некоторых проблемах параллельной разработки и о том, как с ними бороться."&lt;br /&gt;&lt;br /&gt;Картинка для привлечения внимания:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-008-mutual-dependencies-complex.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-008-mutual-dependencies-complex.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Итак, &lt;a href="http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/"&gt;Часть 1&lt;/a&gt; , &lt;a href="http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/2/"&gt;часть 2&lt;/a&gt;. После каждой части - подзаголовок Mitigation, именно там показывается, как можно смягчить показаные проблемы.&lt;br /&gt;&lt;br /&gt;Советы толковые. Во время работы в Мотороле приходилось сталкиваться почти со всеми описанными случаями. Но поставленный процесс и супер-инструмент IBM Rational Clearcase сводили на нет все попытки Полярного Зверька забороть нас.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;via &lt;a href="http://www.cmcrossroads.com/"&gt;CMCrossroads&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-296893637419936550?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/296893637419936550/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/02/merge.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/296893637419936550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/296893637419936550'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/02/merge.html' title='Статья про слияние изменений (merge)'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-4005946087320423154</id><published>2010-01-31T04:25:00.000-08:00</published><updated>2010-01-31T04:29:41.519-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='публикация'/><category scheme='http://www.blogger.com/atom/ns#' term='rsdn'/><category scheme='http://www.blogger.com/atom/ns#' term='RSDN Magazine'/><title type='text'>И снова о RSDN Magazine #3</title><content type='html'>Пару слов в продолжение записи о &lt;b&gt;RSDN Magazine #3&lt;/b&gt;.&lt;br /&gt;Статью разместили в онлайне:&lt;br /&gt;&lt;a href="http://www.rsdn.ru/article/Methodologies/CM_basics_part2.xml"&gt;http://www.rsdn.ru/article/Methodologies/CM_basics_part2.xml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Причем там присутствует фрагмент с развернутым примером про отращивание веток и их слияние.&lt;br /&gt;&lt;br /&gt;Приятного чтения.&lt;br /&gt;&lt;br /&gt;P.S. Вот обложка, кстати. Увидите - берите два ;)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.rsdn.ru/mag/cover/mag0309.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.rsdn.ru/mag/cover/mag0309.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-4005946087320423154?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/4005946087320423154/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/01/rsdn-magazine-3.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/4005946087320423154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/4005946087320423154'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/01/rsdn-magazine-3.html' title='И снова о RSDN Magazine #3'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-129235673678223238</id><published>2010-01-16T01:02:00.000-08:00</published><updated>2010-01-16T01:03:33.970-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='публикация'/><category scheme='http://www.blogger.com/atom/ns#' term='rsdn'/><category scheme='http://www.blogger.com/atom/ns#' term='RSDN Magazine'/><title type='text'>RSDN Magazine #3 2009</title><content type='html'>В свет вышел RSDN Magazine за номером 3, год выпуска - 2009.&lt;br /&gt;При чем здесь записки СМщика? Там опубликовано продолжение (оно же завершение) &lt;a href="http://scm-notes.blogspot.com/2009/09/blog-post_06.html"&gt;первой статьи об основах СМ&lt;/a&gt;. К сожалению, статью урезали, чтобы уложить в объем журнала. Остался за бортом развернутый пример с отращиванием веток и рисованием стрелочек слияния. Кому интересно - он есть в &lt;a href="http://scm-notes.blogspot.com/2009/09/scm-4.html"&gt;статье про контроль версий&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Что интересно, на &lt;a href="http://www.rsdn.ru/"&gt;RSDN&lt;/a&gt; пока ничего про него не было - ни новостей, ни анонсов. В онлайне целиком опубликуют, видимо, нескоро. В любом случае, весь материал статей уже &lt;a href="http://scm-notes.blogspot.com/search/label/CM"&gt;опубликован здесь, в блоге&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;P.S. Теперь я писатель-рецидивист.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-129235673678223238?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/129235673678223238/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2010/01/rsdn-magazine-3-2009.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/129235673678223238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/129235673678223238'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2010/01/rsdn-magazine-3-2009.html' title='RSDN Magazine #3 2009'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-5950180873068687364</id><published>2009-11-22T18:06:00.000-08:00</published><updated>2009-11-22T18:06:01.169-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='политики'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='dvcs'/><category scheme='http://www.blogger.com/atom/ns#' term='policies'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><title type='text'>DVCS // Пример CM-политики с использованием git</title><content type='html'>Через известный ресурс набрёл на описание политики управления конфигурацией в рамках проекта с использованием git.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://m-ivanov.livejournal.com/7988.html"&gt;Собственно, сама заметка.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;При всём моём неприятии git и распределенной модели... :) Раз уж их используете - то хоть используйте правильно и эффективно, как показано в заметке.&lt;br /&gt;&lt;br /&gt;P.S. Ну и набор ссылок по теме:&lt;br /&gt;&lt;a href="http://scm-notes.blogspot.com/2009/11/ms-tfs-branching-guidance.html"&gt;http://scm-notes.blogspot.com/2009/11/ms-tfs-branching-guidance.html&lt;/a&gt; - о ветвлении и работе с контролем версий в Team Foundation Server&lt;br /&gt;&lt;a href="http://scm-notes.blogspot.com/2009/10/software-configuration-management-6.html"&gt;http://scm-notes.blogspot.com/2009/10/software-configuration-management-6.html&lt;/a&gt; - о распределенных системах контроля версий&lt;br /&gt;&lt;a href="http://www.cmcrossroads.com/bradapp/acme/branching/"&gt;http://www.cmcrossroads.com/bradapp/acme/branching/&lt;/a&gt; - всеобъемлющая статья из серий "basics" и одновременно "essentials" на уважаемом ресурсе.&lt;br /&gt;&lt;a href="http://www.infoq.com/articles/agile-version-control"&gt;http://www.infoq.com/articles/agile-version-control&lt;/a&gt;&amp;nbsp; - о контроле версий в стиле agile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-5950180873068687364?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/5950180873068687364/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2009/11/dvcs-cm-git.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5950180873068687364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/5950180873068687364'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2009/11/dvcs-cm-git.html' title='DVCS // Пример CM-политики с использованием git'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-683465187107907757</id><published>2009-11-19T23:03:00.000-08:00</published><updated>2009-11-19T23:07:21.617-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='CVS'/><category scheme='http://www.blogger.com/atom/ns#' term='visualization'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Gource // визуализация контроля версий</title><content type='html'>Проект дня — &lt;a href="http://code.google.com/p/gource/"&gt;Gource&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Берёт на вход логи проекта из git, а также SVN, CVS, Mercurial (после конвертации) и растит в реальном времени дерево — как развивался проект, как появлялись элементы, и их версии.&lt;br /&gt;&lt;br /&gt;Одно из видео проекта. &lt;a href="http://code.google.com/p/gource/wiki/Videos"&gt;Там их несколько&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/E5xPMW5fg48&amp;hl=ru_RU&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/E5xPMW5fg48&amp;hl=ru_RU&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-683465187107907757?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/683465187107907757/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2009/11/gource.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/683465187107907757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/683465187107907757'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2009/11/gource.html' title='Gource // визуализация контроля версий'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-8439052238371410630</id><published>2009-11-06T05:42:00.000-08:00</published><updated>2009-11-06T05:50:10.968-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='isolation'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='team foundation server'/><category scheme='http://www.blogger.com/atom/ns#' term='branching'/><category scheme='http://www.blogger.com/atom/ns#' term='MS'/><title type='text'>MS TFS // Branching Guidance</title><content type='html'>Набрёл на неплохой текст от команды Microsoft Team Foundation Server: &lt;a href="http://branchingguidance.codeplex.com/"&gt;Branching Guidance&lt;/a&gt;&lt;br /&gt;Будущим и нынешним пользователям обозначенной системы предлагается:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;проникнуться важностью ветвления и слияния изменений для работы больших команд;&lt;/li&gt;&lt;li&gt;узнать, какие типы веток бывают и как строить изоляцию работы на их основе;&lt;/li&gt;&lt;li&gt;посмотреть на практических примерах как надо правильно отращивать и мёржить изменения.&lt;/li&gt;&lt;/ol&gt;Интересен неожиданный термин &lt;b&gt;isolation&lt;/b&gt;, обозначающий отделение некоторого потока работ при помощи выбранной техники ветвления. Причем оно отделено от понятия changeset. За подробностями - в статью, по контексту будет понятно, о чём я. В целом же - повторение уже описанных &lt;a href="http://scm-notes.blogspot.com/2009/09/scm-4.html"&gt;истин о контроле версий&lt;/a&gt; :).&lt;br /&gt;&lt;br /&gt;Лишний раз утвердился во мнении, что MS знает толк в методологии разработки софта :) потому как не просто дает инструмент для грамотного СМа, но ещё и объясняет - зачем подобные инструменты вообще нужны.&lt;br /&gt;&lt;br /&gt;Вот тут - одностраничная &lt;a href="http://branchingguidance.codeplex.com/wikipage?title=html&amp;amp;referringTitle=Home"&gt;HTML&lt;/a&gt;-версия.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-8439052238371410630?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/8439052238371410630/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2009/11/ms-tfs-branching-guidance.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8439052238371410630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8439052238371410630'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2009/11/ms-tfs-branching-guidance.html' title='MS TFS // Branching Guidance'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-6022465715098642256</id><published>2009-10-19T17:25:00.000-07:00</published><updated>2010-09-29T04:56:40.488-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etraxis'/><category scheme='http://www.blogger.com/atom/ns#' term='bugtracking'/><category scheme='http://www.blogger.com/atom/ns#' term='issue tracking'/><category scheme='http://www.blogger.com/atom/ns#' term='отслеживание ошибок'/><title type='text'>eTraxis // Теперь в линейке 2.x</title><content type='html'>Некоторое время назад я участвовал в разработке open source проекта &lt;a href="http://code.google.com/p/etraxis/"&gt;eTraxis&lt;/a&gt; — системы отслеживания ошибок, а точнее — системы отслеживания запросов на изменения. Если вдруг кто до сих пор не знает, что это за класс систем — читайте мою &lt;a href="http://scm-notes.blogspot.com/2009/09/scm.html"&gt;статью про системы отслеживания запросов&lt;/a&gt; на изменения из цикла материалов по Software Configuration Management.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=2592326469964039544&amp;amp;postID=6022465715098642256" name="habracut"&gt;&lt;/a&gt; Система эта предоставляет веб-ориентированный интерфейс — что, в общем-то, уже почти стандарт. Серверная часть традиционна — PHP + Apache, а вот парк СУБД даст фору многим подобным системам: помимо традиционного же MySQL поддерживаются PostgreSQL, MSSQL и Oracle.&lt;br /&gt;Из базовых фич:&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;гибкая настройка жизненного цикла записей (ошибок, фич, любых запросов) — настраивается без преувеличения всё в жизненном цикле;&lt;/li&gt;&lt;li&gt;управление правами групп — вплоть до отдельного поля; также есть авторизация через LDAP;&lt;/li&gt;&lt;li&gt;зависимости между записями;&lt;/li&gt;&lt;li&gt;сохранение полной истории работы с записями — запоминается любое изменение в любом поле;&lt;/li&gt;&lt;li&gt;большое количество локализаций;&lt;/li&gt;&lt;li&gt;нотификации/подписки/напоминания;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Есть много других фич, полный список можно найти на сайте.&lt;br /&gt;&lt;br /&gt;Система постоянно развивается уже несколько лет. Насколько известно, установлена в нескольких десятках организаций — от Приморской краевой администрации до инсталяций в Штатах (я сам использовал в одном из подразделений Моторолы) и Европе (взгляните на список локализаций ;) ). Кстати, не так давно один из энтузиастов добавил его в список &lt;a href="http://aur.archlinux.org/packages.php?ID=31160"&gt;кандидатов в репозиторий ArchLinux&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Не так давно система перешла на новый виток развития — что было отмечено переходом нумерации в диапазон 2.х. Что же так изменилось? Прежде всего, это коренные изменения в поддержке Юникода в MSSQL. Переписано то, что касается работы этой СУБД с UTF — до этого приходилось делать довольно немало костылей, чтобы заставить работать базу, где есть только UCS и нет даже намека на поддержку универсальной кодировки. Так же надо отметить прекращение поддержки PHP версии ниже 5.1 и MySQL версий ниже 5.0. Всё это позволило переписать, упростить и улучшить код — и, конечно, улучшить его работу.&lt;br /&gt;&lt;br /&gt;Теперь для разработчика, решившего модифицировать систему, станет ещё проще внести нужные изменения. А для администратора уже некоторое время существует целое руководство. Для него же, как и для потенциального пользователя, есть и демо-версия на базе XAMPP.&lt;br /&gt;&lt;br /&gt;В общем, к чему я это всё… К тому, что если вы ищете систему багтрекинга или систему отслеживания задач, или вообще систему отслеживания чего-либо — стоит попробовать &lt;a href="http://code.google.com/p/etraxis/"&gt;eTraxis&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-6022465715098642256?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/6022465715098642256/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2009/10/etraxis-2x.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6022465715098642256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6022465715098642256'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2009/10/etraxis-2x.html' title='eTraxis // Теперь в линейке 2.x'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-8543444407152437970</id><published>2009-10-19T17:19:00.000-07:00</published><updated>2010-07-28T23:26:46.011-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='clearcase'/><category scheme='http://www.blogger.com/atom/ns#' term='bitkeeper'/><category scheme='http://www.blogger.com/atom/ns#' term='mercurial'/><category scheme='http://www.blogger.com/atom/ns#' term='CM'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='контроль'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><category scheme='http://www.blogger.com/atom/ns#' term='конфигурация'/><category scheme='http://www.blogger.com/atom/ns#' term='распределенный'/><category scheme='http://www.blogger.com/atom/ns#' term='perforce'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='версия'/><title type='text'>SCM // 6. Распределенный контроль версий</title><content type='html'>Сегодня речь пойдет о довольно спорном и в чём-то провокационном вопросе — распределенных системах контроля версий.&lt;br /&gt;&lt;br /&gt;Итак, есть проект и в нём — система контроля версий, обслуживающая несколько команд, которые этот проект реализуют. Система контроля версий — одна на всех. Напомню, что я &lt;a href="http://scm-notes.blogspot.com/search/label/CM"&gt;продолжаю серию заметок&lt;/a&gt;, и раньше я рассказывал о контроле версий вообще, обойдя конкретные реализации стороной. Так что предметная область тоже постепенно эволюционирует от простого к сложному.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Так вот, в какой-то момент возникает необходимость сделать доступным центральное хранилище локально в одном из центров разработки – для ускорения работы и обхода ограничений по трафику или пропускной способности. Скажем, есть две команды, расположенные территориально в разных местах и часовых поясах – скажем, Дальний Восток России и Центральная временная зона США, их разделяет полмира. Работа идет над одним проектом, и есть необходимость менять одни и те же части продукта. Предположим, что сервер системы контроля версий стоит в США – соответственно, разработчикам в России для создания каждой новой версии приходится отправлять изменения через половину земного шара. Да и любая операция вроде перехода на другую ветку со взятием целиком всей выбранной конфигурации, будет отнимать слишком много времени, учитывая величину пинга. В общем, в подобных ситуациях централизованное хранилище – не самый удобный вариант.&lt;br /&gt;&lt;br /&gt;Поскольку проблема не нова и актуальна, со временем были сформулированы разные подходы к решению задачи. А точнее – два подхода к построению распределенных систем контроля.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Открытое распределение&lt;/b&gt; – это принцип построения, при котором каждая рабочая копия конфигурации может иметь свой набор дочерних версий и обмен созданными версиями происходит по выбору создателя изменений.&lt;br /&gt;&lt;br /&gt;Плюсом подобных систем является то, что работа на отдельной рабочей станции может идти независимо от других экземпляров хранилища. Собственно, хранилища может и не быть – сколько копий, столько и хранилищ. Не удивительно, что подобные системы нашли применение в первую очередь в Open Source. Отсутствие необходимости содержать отдельный сервер дает возможность обмениваться только той информацией, которая нужна, и не перегружать хранилище и трафик той дельтой, которая может кому-то никогда так и не понадобиться.&lt;br /&gt;Минус подобного подхода в том, что обмен дельтой рабочих продуктов плохо поддается централизованному контролю. Получается некоторое броуновское движение дельты, которое многим менеджерам, привыкшим к централизации, может быть не по душе.&lt;br /&gt;Примерами подобных систем могут быть BitKeeper, git, Mercurial (Hg).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Распределение путём репликации&lt;/b&gt; предусматривает создание равноценных копий центрального хранилища данных (или его частей) на всех распределенных серверах. Здесь можно провести аналогию с базами данных и их репликацией. Для каждого разработчика хранилище версий, к которому он подключается, является основным. Все версии и ветки создаются в центральном хранилище или реплике. Для распределения данных делается копия хранилища на другие имеющиеся сервера и часть разработчиков переключается на сделанную копию. При необходимости обмена результатами работы, происходит репликация хранилища – оба сервера обмениваются метаинформацией.&lt;br /&gt;&lt;br /&gt;Плюсом подобного подхода можно считать централизацию работы в рамках одного местоположения команды. Также стоит добавить, что имеется возможность удерживать часть накопленной информации от синхронизации с другими командами, но в то же время делать её доступной одновременно всей локальной команде. Это бывает важно, когда код разрабатываемых подсистем не должен попадать наружу – даже для других команд, работающих над этим же продуктом.&lt;br /&gt;&lt;br /&gt;Минус – необходимость настройки механизмов репликации. Но, как правило, системы, использующие такой подход, предусматривают инструменты эффективного обмена данными. Кроме того, для кого-то может быть минусом тот факт, что все операции с версиями производятся на одном сервере, а не на локальном компьютере разработчика. То есть «распределённость» системы проявляется на уровне команд и их местоположения, но никак не на уровне простого разработчика.&lt;br /&gt;Примерами систем с репликацией служат ClearCase и Perforce.&lt;br /&gt;&lt;br /&gt;Оба типа (открытый и репликационный) схожи между собой — в обоих случаях происходит обмен информацией между разными копиями одного множества элементов и их версий. Разница между ними – в «масштабах». В системах с репликацией минимальной единицей реплики, как правило, является репозиторий или его значимая часть, обрабатываемая как единое целое. В системах с открытым распределением минимальная единица обмена информацией – это отдельная версия отдельного элемента.&lt;br /&gt;Для обоих типов распределения характерна общая проблема. Это необходимость введения четкого соглашения об именовании элементов и их веток, а также меток для обозначения полученных конфигураций. При соединении результатов работы не должны получаться разные файлы с одним и тем же именем и метаинформацией (ветками, метками, атрибутами). Поэтому все разработчики и команды, работающие отдельно друг от друга, должны придерживаться общих стандартов. В разных системах бывают предусмотрены механизмы для обеспечения этого условия. К примеру, при работе с ClearCase создаются триггеры на создание любой метаинформации, проверяющие её на соответствие стандарту – для всех создаваемых веток ставится необходимым наличие в имени ветки кода (или идентификатора) того сайта (команды), в котором ветка была создана.&lt;br /&gt;&lt;br /&gt;Кроме того, системы с открытым распределением фактически оставляют на усмотрение каждого отдельного разработчика – что он отдаст команде в виде дельты, а что не станет выставлять на общее обозрение. Плохо это или хорошо – зависит от культуры, принятой в рамках проекта. Для более централизованных систем, с репликацией репозитариев, эта проблема видится под другим углом. Когда все обязаны вносить свои изменения в центральную (для своей команды) систему контроля версий, база метаинформации быстро разрастается в размерах – что сказывается как на стоимости хранения, так и на скорости репликации разнесенных в пространстве баз.&lt;br /&gt;&lt;br /&gt;Какой из подходов лучше, конечно, нельзя сказать сразу и для всех проектов. Приспосабливать для работы броуновское движение git'а или остановиться на более стабильном состоянии – решать менеджменту каждого проекта. Единого решения для всех команд и проектов нет и быть не может. Кому интересно посмотреть на различия разных систем и моделей – см. ссылку [1].&lt;br /&gt;&lt;br /&gt;Кстати, распределенными могут быть не только системы контроля версий, но и системы отслеживания запросов на изменение. Логика работы совершенно аналогична. Вот только основная модель работы – репликационная. Пример – IBM Rational ClearDDTS. Поскольку подобные системы не очень распространены, останавливаться на них подробно не будем.&lt;br /&gt;&lt;br /&gt;По традиции, использованные и рекомендуемые для самостоятельного изучения источники:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Comparison_of_revision_control_software"&gt;en.wikipedia.org/wiki/Comparison_of_revision_control_software&lt;/a&gt; — сравнение систем контроля версий;&lt;/li&gt;&lt;li&gt;&lt;a href="http://lib.custis.ru/index.php/The_Risks_of_Distributed_Version_Control"&gt;lib.custis.ru/index.php/The_Risks_of_Distributed_Version_Control&lt;/a&gt; — трезвый взгляд на риски, связанные с распределенными системами контроля версий;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Порекомендую ещё одну статью о проблемах внедрения разных систем контроля версий:&lt;br /&gt;&lt;a href="http://lib.custis.ru/index.php/Version_Control_and_%E2%80%9Cthe_80%25%E2%80%9D"&gt;lib.custis.ru/index.php/Version_Control_and_%E2%80%9Cthe_80%25%E2%80%9D&lt;/a&gt;&lt;br /&gt;Немного провокационная, однако стоит прочитать в первую очередь тем, кто относит себя к прогрессивной части программерского сообщества.&lt;br /&gt;И, заранее отвечая на вопрос: нет, я не фанат ни SVN, ни git.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P.S.&lt;/b&gt; На отдельной странице собраны ссылки на &lt;a href="http://scm-notes.blogspot.com/p/software-configuration-management.html"&gt;статьи по основам контроля версий&lt;/a&gt; и вообще управлению конфигурациями.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-8543444407152437970?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/8543444407152437970/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2009/10/software-configuration-management-6.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8543444407152437970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/8543444407152437970'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2009/10/software-configuration-management-6.html' title='SCM // 6. Распределенный контроль версий'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-4920977450422987275</id><published>2009-10-01T00:01:00.000-07:00</published><updated>2009-11-08T20:14:15.190-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='публикация'/><category scheme='http://www.blogger.com/atom/ns#' term='rsdn'/><category scheme='http://www.blogger.com/atom/ns#' term='RSDN Magazine'/><title type='text'>Публикация в RSDN Magazine</title><content type='html'>Вышел в свет &lt;a href="http://www.rsdn.ru/article/mag/200902/editorial.xml"&gt;RSDN Magazine #2 2009&lt;/a&gt; - именно в нём опубликована первая часть статьи Основы "Software Configuration Management". Первые 2 заметки из цикла "SCM", опубликованные ранее, на 95% состоят из материалов именно этой статьи.&lt;br /&gt;&lt;br /&gt;Кстати, на обложке, если приглядеться, можно увидеть мою фамилию и название статьи :)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_JEtA8AHBXJ4/SqTlmJsP3hI/AAAAAAAAABE/TWMdzRATHLA/s1600-h/mag0209.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_JEtA8AHBXJ4/SqTlmJsP3hI/AAAAAAAAABE/TWMdzRATHLA/s320/mag0209.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Статья также &lt;a href="http://rsdn.ru/article/Methodologies/CM_basics_part1.xml"&gt;опубликована на сайте&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;P.S. RSDN Magazine #2'2009, К-Пресс, стр. 15-21, ISSN 0234-6621&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-4920977450422987275?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/4920977450422987275/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2009/09/blog-post_06.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/4920977450422987275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/4920977450422987275'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2009/09/blog-post_06.html' title='Публикация в RSDN Magazine'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JEtA8AHBXJ4/SqTlmJsP3hI/AAAAAAAAABE/TWMdzRATHLA/s72-c/mag0209.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-6722116016459184255</id><published>2009-09-22T19:23:00.000-07:00</published><updated>2009-11-23T23:19:44.349-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='план'/><category scheme='http://www.blogger.com/atom/ns#' term='документация'/><category scheme='http://www.blogger.com/atom/ns#' term='metrics'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='CM'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><category scheme='http://www.blogger.com/atom/ns#' term='метрики'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='SCMP'/><title type='text'>SCM // 5. Метрики и документация</title><content type='html'>&lt;h4&gt;Сбор метрик&lt;/h4&gt;Что важно для менеджера, когда перед его глазами должна развернуться вся картина происходящего в проекте? Конечно, это цифры. Для контроля над ситуацией руководитель должен видеть не только то, что имеется в настоящий момент, но и то, что было ранее. Соответственно, только имея это целостное в&lt;i&gt;и&lt;/i&gt;дение, можно прогнозировать будущее проекта, корректировать сроки – в общем, вести нормальную управленческую деятельность.&lt;br /&gt;&lt;br /&gt;При чем здесь CM? При том, что он контролирует изменения. Если учесть, что любой проект — это изменение рабочих продуктов, то через CM проходят &lt;b&gt;все изменения&lt;/b&gt; всего проекта. Стало быть, именно средства по управлению конфигурацией ПО могут давать менеджерам видение того, как изменяется проект во времени. Обычно подобное видение выражается в виде чисел.&lt;br /&gt;&lt;br /&gt;Какие же числовые показатели (&lt;b&gt;метрики&lt;/b&gt;) можно получить из того, что проходит ежедневно через руки CM-инженеров?&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;В первую очередь, это всё, что касается учета запросов на изменение продукта:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;общее количество открытых/закрытых/находящихся в работе запросов;&lt;/li&gt;&lt;li&gt;срезы запросов по каждому участнику – чем именно озадачен каждый, и в каком состоянии работа;&lt;/li&gt;&lt;li&gt;время нахождения запросов в разных состояниях – как среднее, так и по каждому запросу.&lt;/li&gt;&lt;/ul&gt;С этого начинает любой менеджер проекта — он смотрит кто чем насколько сильно занят. Кто работает, а кто болтом груши околачивает.&lt;br /&gt;&lt;br /&gt;Далее, всегда интересна общая информация о коде, как то: количество строк кода продукта и компонентов. Обычно они считаются в CLOC, NCLOC. Интересует всё, что касается вносимых изменений:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;размеры дельты (LOC) в каждом релизе;&lt;/li&gt;&lt;li&gt;размеры дельты по отдельно взятым запросам на изменение (если инструментарий позволяет).&lt;/li&gt;&lt;/ul&gt;Возможны более экзотические варианты запросов, в зависимости от возможностей инструментария и потребностей проекта:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;цикломатическая сложность;&lt;/li&gt;&lt;li&gt;занимаемый размер в памяти (RAM, ROM);&lt;/li&gt;&lt;li&gt;изменения занимаемого объема памяти во времени.&lt;/li&gt;&lt;/ul&gt;Последняя пара метрик интересуют, как правило, те команды, которые работают с системами, имеющими ограничения по ресурсам. К примеру, мне довелось это видеть в Motorola Mobile Devices Software. Объем памяти всегда критичен для сотовых телефонов, особенно когда речь идет о новых чипсетах и архитектурах. А СМ как раз позволяет собирать эти данные на этапе поготовки резизов.&lt;br /&gt;&lt;br /&gt;Кстати, также могут быть интересны отчеты по произведенной работе самих CM-инженеров:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;сколько запросов на интеграцию обработали;&lt;/li&gt;&lt;li&gt;сколько релизов сделали;&lt;/li&gt;&lt;li&gt;каково среднее время, затраченное на релиз.&lt;/li&gt;&lt;/ul&gt;Разумеется, все данные выдаются не только в виде текстовых отчетов, но и в виде самых разных диаграмм – благо, видов их придумали много. Кроме того, по многим показателям можно отследить развитие величин во времени.&lt;br /&gt;&lt;br /&gt;Итого: сбор метрик – вещь неотъемлемая от CM в рамках больших проектов. Для мелких проектов сбор метрик упрощается, а то и вообще сводится на нет. Однако, чем больше руководство проекта знает о происходящем на нижнихз уровнях (в коде), тем более эффективно можно построить повседневную работу.&lt;br /&gt;&lt;h4&gt;Документирование деятельности CM&lt;/h4&gt;Все политики, процедуры и правила, которые устанавливает CM-инженер проекта, должны быть доведены до всех участников проекта. Форма предоставления этой информации не очень важна – главное, чтобы она вообще была предоставлена в срок и была постоянно доступна всем желающим. Как правило, всё, что описывается и формализуется в CM, принято объединять термином «&lt;b&gt;план управления конфигурацией проекта&lt;/b&gt;». В англоязычных источниках используется аббревиатура &lt;b&gt;SCMP – Software Configuration Management Plan&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Этот план описывает всё, чем оперирует управление конфигурацией проекта. Сюда входит следующая информация:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Описание всех элементов конфигурации проекта: какие виды, где лежат, кто использует и кто изменяет.&lt;/li&gt;&lt;li&gt;Инструменты, используемых на проекте. Описывается назначение и даются ссылки для скачивания и установки.&lt;/li&gt;&lt;li&gt;Отдельно описывается система отслеживания запросов на изменение: жизненные циклы запросов, группы пользователей, их права, правила использования. Состав групп обычно определяется в самим системах и нет нужды его перечислять в документе.&lt;/li&gt;&lt;li&gt;Описывается порядок работы с системой контроля версий. Какими инструментами пользоваться, где инструкция по установке клиентской части, какие группы пользователей. Отдельно описывается форматы именования веток и меток, это одна из важнейших частей с точки зрения простого разработчика.&lt;/li&gt;&lt;li&gt;Определяются хранилища для релизов и других элементов, не подпадающих под действие системы контроля версий, и описывается порядок работы с ними.&lt;/li&gt;&lt;li&gt;Дается описание процессов стабилизации конфигурации и выпуска базовых релизов – кем инициируется, каковы процедуры применяются, где лежит и кто отвечает за выпуск. Сюда же входит и описание сбора метрик.&lt;/li&gt;&lt;li&gt;Если в рамках проекта разрабатывается несколько компонентов или продуктовых линеек, то описывается процедуры, специфичные для их CM-деятельности.&lt;/li&gt;&lt;/ul&gt;SCMP может быть оформлен и как отдельный документ, и как серия публикаций в используемой системе документооборота команды разработчиков – например, в Wiki. Главное – чтобы информация была полной, своевременной и доступной для конечного потребителя.&lt;br /&gt;&lt;h4&gt;Вместо заключения&lt;/h4&gt;Выше были рассмотрены формальные стороны SCM — метрики и документация. Надеюсь, кому-то это даст повод задуматься и, возможно, сделать какие-то движения в нужную сторону.&lt;br /&gt;&lt;br /&gt;Приведенная инфа взята из 1) жизни и личного опыта 2) &lt;a href="http://www.sei.cmu.edu/cmmi/"&gt;стандарта SEI CMM/CMMI&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Продолжение следует.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2592326469964039544-6722116016459184255?l=scm-notes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://scm-notes.blogspot.com/feeds/6722116016459184255/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://scm-notes.blogspot.com/2009/09/scm-5.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6722116016459184255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2592326469964039544/posts/default/6722116016459184255'/><link rel='alternate' type='text/html' href='http://scm-notes.blogspot.com/2009/09/scm-5.html' title='SCM // 5. Метрики и документация'/><author><name>Aquary</name><uri>http://www.blogger.com/profile/10690422971056030987</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JEtA8AHBXJ4/TCE1RY4DWFI/AAAAAAAAAU0/lwg8qSACFlc/S220/sniper.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2592326469964039544.post-7047818379707180627</id><published>2009-09-08T18:53:00.000-07:00</published><updated>2010-07-28T23:25:07.120-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='control'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='CM'/><category scheme='http://www.blogger.com/atom/ns#' term='контроль'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='SCM'/><category scheme='http://www.blogger.com/atom/ns#' term='revision'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='версия'/><title type='text'>SCM // 4. Контроль версий</title><content type='html'>И снова здравствуйте.&lt;br /&gt;&lt;br /&gt;Продолжаю публиковать цикл статей о SCM — управлении конфигурацией ПО. &lt;br /&gt;3 предыдущие заметки можно прочитать в этом же блоге.&lt;br /&gt;&lt;br /&gt;Сегодня расскажу о том, с чем работает большинство читателей — о контроле версий.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Disclaimer&lt;/h4&gt;Далее будут описаны основные техники, реализованные в подавляющем большинстве систем контроля версий. Как они реализуются в приложениях, которые использует читатель, оставим на откуп многочисленным руководствам пользователя, how-to, FAQ и прочим документам, коих можно найти без труда. Главное – понять, по каким принципам и зачем оно работает именно так.&lt;br /&gt;&lt;h4&gt;О чем речь?&lt;/h4&gt;&lt;b&gt;Система контроля версий&lt;/b&gt; – это программное обеспечение, позволяющее создавать версии элементов и работать с этими версиями, как с самостоятельными элементами. В англоязычных источниках используется термин &lt;b&gt;version control systems&lt;/b&gt;, сокращенно VCS. Работа с версиями предполагает как создание самих версий, так и структуры для их хранения. Как правило, это или цепочки, или деревья.&lt;br /&gt;&lt;br /&gt;Прежде чем работать с элементами и их версиями, надо эти элементы создать, т.е. дать указать системе контроля версий взять имеющиеся объекты реального мира и поместить их под свой контроль. Вместе с самим элементом всегда создается и его первая версия.&lt;br /&gt;Чаще всего в качестве элементов для контроля версий выступают:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;файлы;&lt;/li&gt;&lt;li&gt;директории;&lt;/li&gt;&lt;li&gt;hard- и softlinks.&lt;/li&gt;&lt;/ul&gt;Внутри системы контроля сами элементы могут размещаться по-разному – это зависит от архитекторы VCS. Пользователю важно лишь знать, что элемент помещается внутри хранилища и работа с ним идет с помощью команд выбранного инструментария.&lt;br /&gt;&lt;h4&gt;Ветвление и слияние версий&lt;/h4&gt;Как уже было сказано, системы контроля должны предоставлять структуры для хранения версий. Самым распространенным представлением подобной структуры является &lt;b&gt;дерево версий&lt;/b&gt;. Это такая организация версий элемента, при которой на основе любой версии элемента конфигурации может быть создано несколько наборов последовательностей его версий. При этом отдельный набор версий, происходящий из произвольной версии, называется &lt;b&gt;веткой&lt;/b&gt;. И поскольку ветка содержит версии, то каждая из версий может быть источником для создания других веток. Короче, дерево.&lt;br /&gt;&lt;br /&gt;Название модели говорит само за себя: у растений (элементов) появляются почки и листья (версии), из них, в свою очередь, ветки. На ветках – листья (другие версии) и другие ветки. На них, опять же, произрастает всё та же растительность. В результате растет дерево, у которого крона – это множество версий. Один элемент – одно дерево.&lt;br /&gt;&lt;br /&gt;Зачем нужна вся эта конструкция? Неужели нельзя просто наращивать версии одну за другой? Конечно, можно. Однако это сразу ограничит возможности использования подобной системы. Если версии появляются одна за одной, то в один момент времени создать новую версию сможет только один из пользователей, работающих с системой, остальные вынуждены будут подождать. Более того, когда появится новая версия, каждому надо будет соединить свои изменения с текущими наработками. И так – пока все желающие не поместят свои наработки в цепочку версий. При этом каждый должен будет убедиться, что слияние версий не привело к поломке системы. И, кроме того, пока все изменения не будут помещены таким образом под контроль, всем из ожидающих придется сохранять промежуточные результаты где-то локально, не смешивая с тем, что находится в настоящий момент в работе. И ладно, если пара человек работает над десятком элементов – они всегда смогут договориться. А если масштабы гораздо больше? Добавим десяток человек (даже не увеличивая количества элементов) – и подобные простые цепочки полностью застопорят работу. В общем, линейная структура версий порождает множество сложностей.&lt;br /&gt;&lt;br /&gt;Итак, ясно, что без веток не обойтись. Но ведь не растить же ветку на малейший чих разработчика? Посмотрим, в каких же случаях отращиваются ветки. Типовые примеры веток таковы:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ветка для запроса на изменения — заводится для версий, создаваемых в ходе работы по запросу на изменение («девелоперская», или «сиарная», ветка);&lt;/li&gt;&lt;li&gt;интеграционная ветка — служит промежуточным хранилищем для процесса стабилизации;&lt;/li&gt;&lt;li&gt;релизная ветка — для выкладывания версий при стабилизации конфигурации (см. соответствующий раздел первой части статьи). Какие-то версии на ветке могут быть в дальнейшем объявлены частью базовой конфигурации;&lt;/li&gt;&lt;li&gt;отладочная («дебажная») ветка — для кратковременного хранения версий, в основном, для целей проверки каких-либо решений.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://1.bp.blogspot.com/_JEtA8AHBXJ4/SqT578Sb-WI/AAAAAAAAABM/1F8hOSr67Kg/s1600-h/2_element_version_tree.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_JEtA8AHBXJ4/SqT578Sb-WI/AAAAAAAAABM/1F8hOSr67Kg/s400/2_element_version_tree.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Схема 1. Дерево версий элемента element.c&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;На схеме 1 изображен пример дерева версий. У файла element.c создана релизная ветка release_1.x, куда складываются стабилизированные версии этого элемента (1-5). Для сохранения дельты по каждому запросу на изменения заводится отдельная ветка со специальным форматом имени. В нашем случае формат имеет вид rec&amp;lt;номер_записи&amp;gt;_&amp;lt;имя_пользователя&amp;gt;, где номер_записи – это ID запроса на изменение в системе отслеживания. Для объединения дельты от разных разработчиков создаются интеграционные ветки с названиями вида int_&amp;lt;имя_пользователя&amp;gt;_&amp;lt;суффикс&amp;gt;, где суффикс хранит описание интеграции или номер стабилизируемой конфигурации. Также можно увидеть ветку для отладки, чаще всего они именуются как dbg_&amp;lt;имя пользователя&amp;gt;_&amp;lt;произвольный_комментарий&amp;gt; — на неё выкладываются проверочные варианты изменений.&lt;br /&gt;&lt;br /&gt;Подробнее про отращивание каждой ветки из примера будет рассказано ниже по тексту.&lt;br /&gt;Каждый проект может иметь свои способы создания и именования веток, однако основные из них были перечислены выше. Если используются продуктовые линейки, то становится необходимым использование всех перечисленных видов.&lt;br /&gt;&lt;br /&gt;Дерево версий растет и ширится, и рано или поздно надо результаты работы объединять. Например, разработчик отрастил ветку у одного из элементов для работы над запросом на изменение. На неё он положил несколько версий, и последняя является той, которая содержит отлаженный и протестированный код. В то же время есть релизная ветка, где лежат версии, выпускаемые в рамках базовых конфигураций и стабильных релизов. Необходимо соединить результаты.&lt;br /&gt;&lt;br /&gt;Для этого используется механизм &lt;b&gt;слияния версий&lt;/b&gt;. Как правило, он подразумевает создание новой версии элемента, для которой в качестве основы берется базовая версия на выбранной ветке (база), и к ней применяются изменения, содержащиеся в выбранной сторонней версии (источнике). В англоязычных источниках используется термин &lt;b&gt;merge&lt;/b&gt; («мёрж»).&lt;br /&gt;&lt;br /&gt;Ветка с версией-источником может быть отращена как от версии-источника, так и от его более ранних предков. Существующие VCS позволяют делать слияние как вручную, так и автоматически. Причем второй способ является основным. Ручное слияние запрашивается лишь в случае конфликтов.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Конфликты слияния&lt;/b&gt; возникают в случае, если в обоих версиях элемента меняется один и тот же фрагмент. Такая ситуация возникает когда предок версии-источника не является версией, от которой будет раститься новая версия. Типичным примером такого конфликта может служить история изменений (revision history), которая добавляется в начало файла исходников, чтобы в каждой версии можно было сразу видеть, кто последним менял и что было сделано. В случае слияния версий, отращенных от разных источников, эта строчка точно будет вызывать конфликт, и решается он лишь вставкой обеих строчек в историю. Когда возникает более сложный случай – разработчик или эксперт в затронутом коде должен внимательно вручную произвести нужные изменения.&lt;br /&gt;&lt;br /&gt;К вопросу об общих предках и о слиянии изменений: кроме ручного и автоматического, слияние может быть произведено двухпозиционным и трёхпозиционным способом. &lt;b&gt;Двухпозиционное слияние&lt;/b&gt; производится простым сравнением двух версий и сложением их &lt;b&gt;дельты&lt;/b&gt; (разницы между версиями элемента). Алгоритм работает по принципу diff'а или приближенно к нему: взять дельту и вставить/удалить/изменить нужные строки.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Трехпозиционное слияние&lt;/b&gt; учитывает «&lt;b&gt;общего предка&lt;/b&gt;» обеих версий и высчитывает дельту исходя из истории изменения элемента в соответствующих ветках. Соответственно, при возникновении конфликта слияния разработчику предлагается 3 версии элемента – общий предок и 2 варианта, что с этим предком стало с течением времени и изменений. Такой подход помогает оценить степень и важность дельты на обеих ветках и принять решение о необходимости интеграции конфликтного куска часто даже без участия авторов изменений.&lt;br /&gt;&lt;br /&gt;После того как слияние проведено, информация о нём должна быть сохранена, если это возможно. Как правило, большинство зрелых VCS имеют возможность сохранить «стрелки слияния» – метаинформацию о том, откуда, куда и в каком момент времени сливались изменения и кто это делал.&lt;br /&gt;&lt;h4&gt;Пример ветвления и слияния&lt;/h4&gt;Рассмотрим пример – дерево версий элемента на схеме 2, продемонстрировав порядок отращивания и слияния веток на нём. Как уже можно догадаться, дерево целиком взято со схемы 1, но к нему добавлены стрелки слияния.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_JEtA8AHBXJ4/SqT591s5MjI/AAAAAAAAABU/Gmudqsdl3Bs/s1600-h/3_version_tree_merge.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_JEtA8AHBXJ4/SqT591s5MjI/AAAAAAAAABU/Gmudqsdl3Bs/s400/3_version_tree_merge.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;Схема 2. Пример слияния изменений между ра
