<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Комментарии: Бранчинг.</title>
	<atom:link href="http://victorronin.com/2009/07/22/branching/feed/" rel="self" type="application/rss+xml" />
	<link>http://victorronin.com/2009/07/22/branching/</link>
	<description>Несерьезные мысли о серьезном бизнесе от Виктора Ронина.</description>
	<lastBuildDate>Mon, 23 Jan 2012 10:08:39 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>Автор: lyka</title>
		<link>http://victorronin.com/2009/07/22/branching/comment-page-1/#comment-104038</link>
		<dc:creator>lyka</dc:creator>
		<pubDate>Sun, 23 Aug 2009 11:40:04 +0000</pubDate>
		<guid isPermaLink="false">http://victorronin.com/2009/07/22/branching/#comment-104038</guid>
		<description>начинайте с простейшей стратегии</description>
		<content:encoded><![CDATA[<p>начинайте с простейшей стратегии</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Victor Ronin</title>
		<link>http://victorronin.com/2009/07/22/branching/comment-page-1/#comment-101693</link>
		<dc:creator>Victor Ronin</dc:creator>
		<pubDate>Thu, 23 Jul 2009 15:14:55 +0000</pubDate>
		<guid isPermaLink="false">http://victorronin.com/2009/07/22/branching/#comment-101693</guid>
		<description>Насчет каши с логами - солидарен. Это проблема, только если пытаться работать со всем репозиторием, вместо отдельных его веток.

Насчет нестабильного Trunk - это четко по SVNBook.

Насчет переноса по фиксам - хорошее замечание. Я тоже так привык работать, когда фикс сразу кладется в release branch и в trunk, вместо того, что накапливается много в release branch&#039;е.

Насчет примера. Мы точно так же и работали. И кстати, та же самая ситуация с тем, что возникается путаница, что в одной ветке может получить и 5.0 и 5.1 и 5.2.
Но это в целом решается с помощью tag&#039;ов. Хотя для средних компаний редко нужно выпускать фиксы а-ля 5.1.1, когда идет работа уже над 5.2 (все на ветке 5.0), так что просто кладут в конец 5.0 и оттуда выпускают.</description>
		<content:encoded><![CDATA[<p>Насчет каши с логами &#8211; солидарен. Это проблема, только если пытаться работать со всем репозиторием, вместо отдельных его веток.</p>
<p>Насчет нестабильного Trunk &#8211; это четко по SVNBook.</p>
<p>Насчет переноса по фиксам &#8211; хорошее замечание. Я тоже так привык работать, когда фикс сразу кладется в release branch и в trunk, вместо того, что накапливается много в release branch&#8217;е.</p>
<p>Насчет примера. Мы точно так же и работали. И кстати, та же самая ситуация с тем, что возникается путаница, что в одной ветке может получить и 5.0 и 5.1 и 5.2.<br />
Но это в целом решается с помощью tag&#8217;ов. Хотя для средних компаний редко нужно выпускать фиксы а-ля 5.1.1, когда идет работа уже над 5.2 (все на ветке 5.0), так что просто кладут в конец 5.0 и оттуда выпускают.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: Victor Ronin</title>
		<link>http://victorronin.com/2009/07/22/branching/comment-page-1/#comment-101692</link>
		<dc:creator>Victor Ronin</dc:creator>
		<pubDate>Thu, 23 Jul 2009 15:09:34 +0000</pubDate>
		<guid isPermaLink="false">http://victorronin.com/2009/07/22/branching/#comment-101692</guid>
		<description>М... Не совсем вижу в чем польза в раскладыванию по разным репозиториям. Точнее так - нагрузку на сервера можно уменьшить.
Но в целом, каша в логах будет только в том случае, если все лежат по папкам и пытаешься сделать show log на весь репозиторий.</description>
		<content:encoded><![CDATA[<p>М&#8230; Не совсем вижу в чем польза в раскладыванию по разным репозиториям. Точнее так &#8211; нагрузку на сервера можно уменьшить.<br />
Но в целом, каша в логах будет только в том случае, если все лежат по папкам и пытаешься сделать show log на весь репозиторий.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: myskam</title>
		<link>http://victorronin.com/2009/07/22/branching/comment-page-1/#comment-101677</link>
		<dc:creator>myskam</dc:creator>
		<pubDate>Thu, 23 Jul 2009 07:44:03 +0000</pubDate>
		<guid isPermaLink="false">http://victorronin.com/2009/07/22/branching/#comment-101677</guid>
		<description>Очень часто каждая команда разработчиков выбирает свой собственный подход для создания веток в репозитории. Поэтому поделюсь собственным опытом. Конечно он базируется на SVN Book и скорее всего в нем нет ничего хитрого и специфического.

Структура репозитория (по SVN Book):
&lt;code&gt;
Product1/
   trunk/
      branches/
         branch1
         ...
   tags/
      tag1
      ...
Product2/
   ...
&lt;/code&gt;

Каши с логами не будет если указывать URL к конкретному продукту и более того к конкретной ветке (или транку).

Trunk - это НЕстабильная ветка. В нем ведется разработка последней версии продукта, которая находится в Alpha или Beta стадии. Как только продукт достигает стадии RC, создается ветка соответсвующего релиза. В идеале в этой ветке ничего не делается и она нужна только для пост-релизного сопровождения данной версии (создание сервис-паков).

Существует еще один нюанс при создании ветки для версии продукта. Если необходимо вести разработку нескольких версий продукта одновременно (а это я настоятельно рекомендую всячески избегать), то ветку для версии можно создать на более ранних стадиях (Alpha или Beta). Но при этом всегда стоит помнить, что самая последняя версия остается в транке.

Любые изменения в версионных ветках ОБЯЗАТЕЛЬНО должны быть перенесены в транк (причем &quot;один фикс - один мерж&quot;, а не пачкой раз в неделю или месяц или при стабилизации ветки). Изменения из веток для более ранних версий переносить в ветки для более поздних версий рекомендуется делать только по необходимости. Возможны ситуации, когда исходный код веток отличается радикально, тогда этот фикс выполняется заново, но уже базируясь на коде новой ветки. Иногда бывает, что некий дефект из ранней версии не применим к более поздней. Тогда ничего переносить не нужно.

Ответвления от версионных ветвей допускаются. И здесь работает тот же принцип что и с транком. В них можно вносить изменения. Они становится некими аккомулятивными ветками.

Пример:
Ведем разработку версии 5.0. Работаем в транке. Достигнута стадия RC - реализована вся функциональность для этой версии (это требование для завершения Alpha стадии) и исправлены все найденые дефекты (это требование для завершения Beta). В этот момент создается ветка v5.0. И в этот момент можно приступать к версии 6.0 в транке. Если вдруг необходим некий хот-фикс для 5.0 версии, то он выполняется в v5.0 ветке и переносится в транк. При этом новый 5.0 RC билд строится из v5.0 ветки. Если, через некоторое время, будет принято решения выпустить 5.1 сервис-пак для версии 5.0 (а на этот момент новых билдов 5.0 версии быть не может), то изменения вносятся в ветку v5.0 (плюс эти же изменения обязательно переносятся в транк) и когда 5.1 сервис-пак достигнет стадии RC - создается ветка v5.1 из ветки v5.0. Если вдруг потребуется хот-фикс для 5.1 версии, то как и прежде, эти изменения (в ветке v5.1) обязательно должны быть перенесены в транк и обязательно в ветку v5.0. К сожалению, здесь есть небольшая путаница, поскольку ветка v5.0 плавно превращается в ветку для версии 5.1 (хотя название ветки остается v5.0), а затем в ветку для версии 5.2. Возможно эту путаницу можно решить с помощью промежуточной ветки v5.x, но это уже по вашему желанию.</description>
		<content:encoded><![CDATA[<p>Очень часто каждая команда разработчиков выбирает свой собственный подход для создания веток в репозитории. Поэтому поделюсь собственным опытом. Конечно он базируется на SVN Book и скорее всего в нем нет ничего хитрого и специфического.</p>
<p>Структура репозитория (по SVN Book):<br />
<code><br />
Product1/<br />
   trunk/<br />
      branches/<br />
         branch1<br />
         ...<br />
   tags/<br />
      tag1<br />
      ...<br />
Product2/<br />
   ...<br />
</code></p>
<p>Каши с логами не будет если указывать URL к конкретному продукту и более того к конкретной ветке (или транку).</p>
<p>Trunk &#8211; это НЕстабильная ветка. В нем ведется разработка последней версии продукта, которая находится в Alpha или Beta стадии. Как только продукт достигает стадии RC, создается ветка соответсвующего релиза. В идеале в этой ветке ничего не делается и она нужна только для пост-релизного сопровождения данной версии (создание сервис-паков).</p>
<p>Существует еще один нюанс при создании ветки для версии продукта. Если необходимо вести разработку нескольких версий продукта одновременно (а это я настоятельно рекомендую всячески избегать), то ветку для версии можно создать на более ранних стадиях (Alpha или Beta). Но при этом всегда стоит помнить, что самая последняя версия остается в транке.</p>
<p>Любые изменения в версионных ветках ОБЯЗАТЕЛЬНО должны быть перенесены в транк (причем &laquo;один фикс &#8211; один мерж&raquo;, а не пачкой раз в неделю или месяц или при стабилизации ветки). Изменения из веток для более ранних версий переносить в ветки для более поздних версий рекомендуется делать только по необходимости. Возможны ситуации, когда исходный код веток отличается радикально, тогда этот фикс выполняется заново, но уже базируясь на коде новой ветки. Иногда бывает, что некий дефект из ранней версии не применим к более поздней. Тогда ничего переносить не нужно.</p>
<p>Ответвления от версионных ветвей допускаются. И здесь работает тот же принцип что и с транком. В них можно вносить изменения. Они становится некими аккомулятивными ветками.</p>
<p>Пример:<br />
Ведем разработку версии 5.0. Работаем в транке. Достигнута стадия RC &#8211; реализована вся функциональность для этой версии (это требование для завершения Alpha стадии) и исправлены все найденые дефекты (это требование для завершения Beta). В этот момент создается ветка v5.0. И в этот момент можно приступать к версии 6.0 в транке. Если вдруг необходим некий хот-фикс для 5.0 версии, то он выполняется в v5.0 ветке и переносится в транк. При этом новый 5.0 RC билд строится из v5.0 ветки. Если, через некоторое время, будет принято решения выпустить 5.1 сервис-пак для версии 5.0 (а на этот момент новых билдов 5.0 версии быть не может), то изменения вносятся в ветку v5.0 (плюс эти же изменения обязательно переносятся в транк) и когда 5.1 сервис-пак достигнет стадии RC &#8211; создается ветка v5.1 из ветки v5.0. Если вдруг потребуется хот-фикс для 5.1 версии, то как и прежде, эти изменения (в ветке v5.1) обязательно должны быть перенесены в транк и обязательно в ветку v5.0. К сожалению, здесь есть небольшая путаница, поскольку ветка v5.0 плавно превращается в ветку для версии 5.1 (хотя название ветки остается v5.0), а затем в ветку для версии 5.2. Возможно эту путаницу можно решить с помощью промежуточной ветки v5.x, но это уже по вашему желанию.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Автор: ctype</title>
		<link>http://victorronin.com/2009/07/22/branching/comment-page-1/#comment-101669</link>
		<dc:creator>ctype</dc:creator>
		<pubDate>Thu, 23 Jul 2009 04:22:14 +0000</pubDate>
		<guid isPermaLink="false">http://victorronin.com/2009/07/22/branching/#comment-101669</guid>
		<description>По-поводу структуры веток - вообще-то если продукты действительно разные, то более естественно раскладывать их по отдельным репозиториям, а не по под-каталогам - и администрировать легче и в логах не будет &quot;каши&quot;</description>
		<content:encoded><![CDATA[<p>По-поводу структуры веток &#8211; вообще-то если продукты действительно разные, то более естественно раскладывать их по отдельным репозиториям, а не по под-каталогам &#8211; и администрировать легче и в логах не будет &laquo;каши&raquo;</p>
]]></content:encoded>
	</item>
</channel>
</rss>

