<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Лобач.info &#187; SVN</title>
	<atom:link href="http://lobach.info/category/develop/svn/feed/" rel="self" type="application/rss+xml" />
	<link>http://lobach.info</link>
	<description>Заметки LAMP-программиста о вебдеве и не только...</description>
	<lastBuildDate>Tue, 13 Jul 2010 14:56:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Советы по фиксациям в SVN</title>
		<link>http://lobach.info/develop/svn/svn-commit-tutorial/</link>
		<comments>http://lobach.info/develop/svn/svn-commit-tutorial/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 21:43:12 +0000</pubDate>
		<dc:creator>Лобач Олег</dc:creator>
				<category><![CDATA[SVN]]></category>
		<category><![CDATA[контроль версий]]></category>
		<category><![CDATA[перевод]]></category>
		<category><![CDATA[советы]]></category>

		<guid isPermaLink="false">http://lobach.info/?p=136</guid>
		<description><![CDATA[Предлагаю перевод хорошей статьи с советами по выполнению фиксаций в хранилище. Оригинал написан для проекта T2, но практически все советы универсальны и легко применимы для любого другого проекта. А самое главное&#160;&#8212; они действительно полезны.
В названии статьи хоть и фигурирует SVN, но советы, изложенные в ней, подходят ко всем известным мне системам кондроля версий. Стоит так [...]]]></description>
			<content:encoded><![CDATA[<p><em>Предлагаю перевод хорошей статьи с советами по выполнению фиксаций в хранилище. Оригинал написан для проекта <a href="http://www.t2-project.org/">T2</a>, но практически все советы универсальны и легко применимы для любого другого проекта. А самое главное&nbsp;&mdash; они действительно полезны.</em></p>
<p><em>В названии статьи хоть и фигурирует SVN, но советы, изложенные в ней, подходят ко всем известным мне системам кондроля версий. Стоит так же заметить, что советы направлены в основном на командную разработку.</em></p>
<p><span id="more-136"></span></p>
<p><em><strong>Источник</strong>: <a href="http://www.t2-project.org/developer/svn-commit-tutorial.html">T2 SVN commit tutorial</a><br />
<strong>Автор</strong>: The T2 SDE Project<br />
<strong>Перевод</strong>: Лобач Олег</em></p>
<p><strong>Дважды подумайте перед фиксацией изменений</strong></p>
<p>Т.к. фиксация изменений в SVN может иметь серьёзные последствия, найдите время для того, чтобы разобраться, не сломает ли ваш код что либо у других разработчиков. Ведь хранилище кода одно на всех, и если вы что-то сломаете, то это сломается у всех. SVN, конечно, позволяет вернуться к предыдущим версиям и это может помочь решить проблему, но лучше все же предупредить проблему, чем её в последствии героически устранять.</p>
<p><strong>Никогда не фиксируйте код, который не компилируется</strong></p>
<p><em>Прим. пер.: в этом пункте речь идет о компиляции, что для веб-разработки не актуально, но если под компиляцией понимать отсутствие ошибок, то пункт вполне обретает смысл и для веб-приложений</em></p>
<p>Скомпилируйте код и устраните все ошибки прежде чем фиксировать изменения в хранилище. Убедитесь, что новые файлы были зафиксированы. Если их не будет, то у вас локально код будет компилироваться, а все остальные не смогут этого сделать.</p>
<p>Вам, безусловно, следует убедиться, что код компилируется с вашими локальными настройками и на вашей платформе. Вы также должны принять во внимание последствия вашей фиксации для компиляции на другой архитектуре.</p>
<p><strong>Тестируйте ваши изменения перед фиксацией</strong></p>
<p>Запустите приложение и проверьте работу тех участков, которые могли быть затронуты вашими изменениями,чтобы убедиться в том, что изменения ведут себя так, как вы задумывали.</p>
<p><strong>Дважды проверьте то, что фиксируете</strong></p>
<p>Сделайте <em>&laquo;svn up&raquo;</em> и <em>&laquo;svn diff&raquo;</em> перед фиксацией. Получите сообщения от SVN о конфликтах, неизвестных файлах и прочее. &laquo;svn diff&raquo; покажет, что же именно вы фиксируете. Проверьте, действительно ли это то, что вы собирались фиксировать.</p>
<p><strong>Всегда добавляйте содержательные комментарии<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> к фиксации</strong></p>
<p>Комментарии должны быть понятны любому, кто видит только лог. Они не должны зависеть от информации вне контекста фиксации.<br />
Попробуйте описать только те файлы, которые реально затрагиваются в описываемых в комментариях изменениями.</p>
<p>На практике, заносите в комментарии всю важную информацию, которую невозможно увидеть из вывода команды <em>diff</em>.</p>
<p><strong>Система контроля версий не является заменой общению между разработчиками</strong></p>
<p>Когда вы планируете сделать изменения, затрагивающие множество различного кода в SVN, сообщите об этом в подписном листе заранее.</p>
<p>Изменения, затрагивающие множество кода в SVN, такие как переход на использование новых функций в библиотеках, способны сломать прочий код, даже если они кажутся тривиальными. Такие изменения могут быть опасны потому, что приложение должно по ряду причин компилироваться со старыми библиотеками. Сообщив об изменениях заранее, разработчики могут подготовиться и высказать обеспокоенность, прежде, чем что-то сломается.</p>
<p><strong>Возьмите на себя ответственность за собственные фиксации</strong></p>
<p>Если ваша фиксация сломала что-то или имеет побочное действие на другие участки кода, будьте ответственными и исправьте это или помогите другим исправить проблему.</p>
<p><strong>Не фиксируйте код, который вы не понимаете</strong></p>
<p>Избегайте ситуаций, подобных этой: &laquo;Я не знаю, почему он <em>падает</em>, но когда я делаю это, он больше не <em>падает&raquo;</em> или &laquo;Я не вполне уверен, что это правильно, но во всяком случае у меня это работает&raquo;.</p>
<p>Если вы не нашли решение проблемы, обсудите её с другими разработчиками.</p>
<p><strong>Не злоупотребляйте своим SVN-аккаунтом, чтобы пропихнуть изменения, отвергнутые другими разработчиками</strong></p>
<p>Если есть разногласия по поводу изменения кода, они должны быть урегулированы путем обсуждения их в списке рассылки или в частном порядке, а не насильной заменой кода других, просто зафиксировав свои изменения в хранилище.</p>
<p><strong>Если вы фиксируете багфикс, учитывайте перенос исправлений в другие ветки</strong></p>
<p>Используйте одинаковый комментарий для обеих фиксаций &ndash; основного исправления и переносимого (только дополните комментарий номером ревизии основной фиксации). Таким образом, можно легко увидеть, какие исправления были уже перенесены.</p>
<p><strong>Если вы исправляете ошибки, зафиксированные в системе учета ошибок<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>, добавьте в комментарий номер ошибки</strong></p>
<p>Для того, чтобы сохранять вашу систему учета ошибок и SVN синхронизированными, вы должны указывать номер ошибки в комментариях к вашим фиксациям, а затем закрывать ошибку в системе учета.</p>
<p><strong>Создавайте атомарные фиксации</strong></p>
<p>SVN имеет возможность фиксировать более одного файла за один раз. Поэтому, пожалуйста, фиксируйте все связанные изменения в нескольких файлах (даже если они охватывают несколько каталогов одновременно) за один раз. Таким образом, вы будете уверенны, что хранилище останется в компилируемом состоянии (<em>т.е. код в хранилище компилируется без ошибок,&nbsp;&mdash; прим. пер.</em>) до и после фиксации, а так же наборы изменений легки для слияний или откатов.</p>
<p><strong>Не смешивайте изменения форматирования и изменения кода</strong></p>
<p>Изменение форматирования кода, такое как <em>отступ</em> или <em>разрежение</em>, просто взрывает <em>diff</em>, что сильно затрудняет поиск изменений в коде если они перемешаны с форматированием. Фиксирование изменений форматирования отдельно разрешает эту проблему.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">
<p>в оригинале: log messages&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>
<li id="fn:2">
<p>bug tracking system&#160;<a href="#fnref:2" rev="footnote">&#8617;</a></p>
</li>
</ol>
</div>

	Tags: <a href="http://lobach.info/tag/svn/" title="SVN" rel="tag">SVN</a>, <a href="http://lobach.info/tag/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d1%8c-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b9/" title="контроль версий" rel="tag">контроль версий</a>, <a href="http://lobach.info/tag/perevod/" title="перевод" rel="tag">перевод</a>, <a href="http://lobach.info/tag/%d1%81%d0%be%d0%b2%d0%b5%d1%82%d1%8b/" title="советы" rel="tag">советы</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/svn/svn-links/" title="Снова про использование Subversion (29.02.2008)">Снова про использование Subversion</a> (0)</li>
	<li><a href="http://lobach.info/develop/zf/custom-zend_application-resources/" title="Пользовательские ресурсы для Zend_Application (13.01.2010)">Пользовательские ресурсы для Zend_Application</a> (0)</li>
	<li><a href="http://lobach.info/some/branch-merging-part2/" title="Как слить изменения между ветками. Часть 2 (27.01.2008)">Как слить изменения между ветками. Часть 2</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/branch-merging-part1/" title="Как слить изменения между ветками. Часть 1 (22.01.2008)">Как слить изменения между ветками. Часть 1</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/making-branches/" title="Как и Зачем делать ветки? (18.12.2007)">Как и Зачем делать ветки?</a> (3)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/svn/svn-commit-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Снова про использование Subversion</title>
		<link>http://lobach.info/develop/svn/svn-links/</link>
		<comments>http://lobach.info/develop/svn/svn-links/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 12:15:22 +0000</pubDate>
		<dc:creator>Лобач Олег</dc:creator>
				<category><![CDATA[SVN]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[контроль версий]]></category>

		<guid isPermaLink="false">http://lobach.info/develop/svn/svn-links/</guid>
		<description><![CDATA[Сегодня опять хочу вернуться к теме использования Subversion-а. Но в этот раз представлю не свой опыт работы с svn, а дам несколько ссылок на полезные заметки. Все они взяты из блога Developer&#39;s Notes (кстати, рекомендую последовать моему примеру и подписаться на RSS-поток).

Subversion. Установка и настройка. День первый&#160;&#8212; взгляд на svn из Linux-а: установка, создание хранилища
Subversion. [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня опять хочу вернуться к теме использования Subversion-а. Но в этот раз представлю не свой опыт работы с svn, а дам несколько ссылок на полезные заметки. Все они взяты из блога <a href="http://bthemad.blogspot.com/">Developer&#39;s Notes</a> (кстати, рекомендую последовать моему примеру и подписаться на RSS-поток).</p>
<ul>
<li><a href="http://bthemad.blogspot.com/2007/11/subversion.html">Subversion. Установка и настройка. День первый</a>&nbsp;&mdash; взгляд на svn из Linux-а: установка, создание хранилища</li>
<li><a href="http://bthemad.blogspot.com/2007/11/subversion_16.html">Subversion. Установка и настройка. День второй</a>&nbsp;&mdash; настройка <a href="http://www.eclipse.org/">Eclipse</a> для работы с svn, создание проекта, проверка работоспособности. К этой заметке у меня есть замечание. На сколько я понял, автор предлагает размещать воркспейс эклипса в том каталоге, где будет вестись разработка, т.е. в докрут девелоперского сайта. С таким предложением я категорически несогласен&nbsp;&mdash; воркспейс должен лежать в домашней директории пользователя, иначе придется делать лишние телодвижения и поиметь возможность нарваться на решение различных проблем. А чтобы вести разработку в нужном нам каталоге, достаточно указать его при создании проекта&nbsp;&mdash; место размещения воркспейса и место разработки никак не связаны.</li>
<li><a href="http://bthemad.blogspot.com/2008/01/subversion.html">Управление сторонними библиотеками в Subversion</a>&nbsp;&mdash; небольшая заметка о <a href="http://lobach.info/develop/svn/svn-externals/">внешних зависимостях</a>, очень кратко: зачем это нужно и как это делать.</li>
</ul>
<p>Кроме вышеперечисленных, в блоге есть еще несколько интересных постов, например, о переходе на <a href="http://www.ubuntu.com/">Ubuntu</a>.</p>

	Tags: <a href="http://lobach.info/tag/eclipse/" title="eclipse" rel="tag">eclipse</a>, <a href="http://lobach.info/tag/links/" title="links" rel="tag">links</a>, <a href="http://lobach.info/tag/svn/" title="SVN" rel="tag">SVN</a>, <a href="http://lobach.info/tag/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d1%8c-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b9/" title="контроль версий" rel="tag">контроль версий</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/svn/svn-commit-tutorial/" title="Советы по фиксациям в SVN (16.04.2009)">Советы по фиксациям в SVN</a> (0)</li>
	<li><a href="http://lobach.info/some/branch-merging-part2/" title="Как слить изменения между ветками. Часть 2 (27.01.2008)">Как слить изменения между ветками. Часть 2</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/branch-merging-part1/" title="Как слить изменения между ветками. Часть 1 (22.01.2008)">Как слить изменения между ветками. Часть 1</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/making-branches/" title="Как и Зачем делать ветки? (18.12.2007)">Как и Зачем делать ветки?</a> (3)</li>
	<li><a href="http://lobach.info/develop/svn/svn-externals/" title="Внешние зависимости (11.02.2008)">Внешние зависимости</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/svn/svn-links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Внешние зависимости</title>
		<link>http://lobach.info/develop/svn/svn-externals/</link>
		<comments>http://lobach.info/develop/svn/svn-externals/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 15:07:58 +0000</pubDate>
		<dc:creator>Лобач Олег</dc:creator>
				<category><![CDATA[SVN]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[контроль версий]]></category>
		<category><![CDATA[примеры]]></category>

		<guid isPermaLink="false">http://lobach.info/develop/svn/svn-externals/</guid>
		<description><![CDATA[Давненько я не писал в блог. Надо исправляться. Чем сейчас и займусь...
А рассказать сегодня я хочу об еще одной неочевидной вещи Subversion-а&#160;&#8212; &#171;внешних зависимостях&#187;.

&#171;Внешние зависимости&#187;&#160;&#8212; это способ включения в дерево своего проекта любые каталоги из других проектов и других хранилищ. Это несколько напоминает симлинки в юникс-лайк файловых системах. Т.е. в каком-либо каталоге проекта создается ссылка [...]]]></description>
			<content:encoded><![CDATA[<p>Давненько я не писал в блог. Надо исправляться. Чем сейчас и займусь...</p>
<p>А рассказать сегодня я хочу об еще одной неочевидной вещи <a href="http://subversion.tigris.org">Subversion-а</a>&nbsp;&mdash; &laquo;внешних зависимостях&raquo;.</p>
<p><span id="more-23"></span></p>
<p>&laquo;<strong>Внешние зависимости</strong>&raquo;&nbsp;&mdash; это способ включения в дерево своего проекта любые каталоги из других проектов и других хранилищ. Это несколько напоминает симлинки в юникс-лайк файловых системах. Т.е. в каком-либо каталоге проекта создается ссылка на другой каталог и при создании рабочей копии этого проекта (или апдейте существующей РК) вместо ссылки будет создана рабочая копия из того места, куда указывает эта ссылка.</p>
<p>В отличии от симлинков файловой системы, указание на внешнюю зависимость представляет собой свойство каталога. Т.е. для создания связи с другим хранилищем нужно в свойствах каталога, куда будет подключен внешний каталог, указать ссылку. Все остальное сделает SVN.</p>
<p>Свойство, отвечающее за внешние зависимости, называется <strong>svn:externals</strong>. Для его установки можно воспользоваться командой  <em>svn propedit</em> или пунктом &laquo;<strong>Properties</strong>&raquo; (если воспользоваться <a title="TortoiseSVN" href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>).<br />
<img src='http://lobach.info/wp-content/uploads/2008/02/2008-02-11_164621.png' alt='Пункт “Свойства” контекстного меню' /></p>
<p>Чаще всего внешние зависимости используются для включения в проект различных библиотек. В качестве примера я покажу как включить в свой проект <a href="http://framework.zend.com/">Zend Framework</a> и <a href="http://www.smarty.net/">Smarty</a>. Подключать я предлагаю в отдельный каталог <strong>lib</strong>. Я предполагаю, что этот каталог уже находится в хранилище.</p>
<p>Вызвав контекстное меню каталога <strong>lib</strong>, выбираем пункт &laquo;Свойства&raquo;. В открывшемся окне нажимаем на кнопку &laquo;<em>Добавить</em>&raquo;<br />
<img src='http://lobach.info/wp-content/uploads/2008/02/2008-02-11_170206.png' alt='Окно свойств' /></p>
<p>Из списка свойств выбираем нужное нам свойство<br />
<img src='http://lobach.info/wp-content/uploads/2008/02/2008-02-11_170507.png' alt='Список свойств' /></p>
<p>и в области значения свойства вводим название каталога и адрес хранилища:</p>
<pre><code>Zend http://framework.zend.com/svn/framework/tag/release-1.0.3/library/Zend
smarty http://smarty-php.googlecode.com/svn/tags/Smarty_2_6_18/libs</code></pre>
<p><img src='http://lobach.info/wp-content/uploads/2008/02/2008-02-11_170901.png' alt='Ссылки на библиотеки' /></p>
<p>После этого жмем на кнопку &laquo;<em>ОК</em>&raquo;<br />
<img src='http://lobach.info/wp-content/uploads/2008/02/2008-02-11_171004.png' alt='Устанавливаем свойство' /></p>
<p>После этого делаем commit, а за тем update. Вуаля! Наш каталог содержит ZF и smarty.</p>
<p>Хочу обратить внимание на адреса подключения библиотек&nbsp;&mdash; они указывают на конкретный релиз библиотеки. Это гарантирует стабильность работы, конечно по сравнению с веткой разработки. Можно было бы забирать библиотеки и из главной ветки, просто нужно дополнить путь номером правки&nbsp;&mdash; эффект получился бы такой же. Но указание в пути номера релиза гораздо удобней, на мой взгляд.</p>
<p>Так же следует учитывать, что внешние зависимости обладают определенными ограничениями. Во-первых, внешние зависимости, так же как и симлинки, не отслеживают изменение пути к ресурсу, на который ссылаются. Т.е. если ресурс переименовать, то ссылка станет ошибочной. Во-вторых, пути внешних зависимостей могут быть только абсолютные. В-третьих, они могут указывать только на каталог, но не на файл. В-четвертых, рабочие копии созданные через внешние зависимости являются оторванными от первичной рабочей копии. Т.е. фиксация изменений первичной рабочей копии не затронет изменения рабочей копии, созданной по внешней зависимости. Это нужно делать вручную.</p>
<p>Если возникнет желание подробнее разобраться в теме этого поста, рекомендую прочитать раздел &laquo;<a href="http://svnbook.red-bean.com/nightly/ru/svn.advanced.externals.html">Внешние зависимости</a>&raquo; из 3-й главы мануала.</p>

	Tags: <a href="http://lobach.info/tag/svn/" title="SVN" rel="tag">SVN</a>, <a href="http://lobach.info/tag/tutorial/" title="tutorial" rel="tag">tutorial</a>, <a href="http://lobach.info/tag/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d1%8c-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b9/" title="контроль версий" rel="tag">контроль версий</a>, <a href="http://lobach.info/tag/%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80%d1%8b/" title="примеры" rel="tag">примеры</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/some/branch-merging-part2/" title="Как слить изменения между ветками. Часть 2 (27.01.2008)">Как слить изменения между ветками. Часть 2</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/branch-merging-part1/" title="Как слить изменения между ветками. Часть 1 (22.01.2008)">Как слить изменения между ветками. Часть 1</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/making-branches/" title="Как и Зачем делать ветки? (18.12.2007)">Как и Зачем делать ветки?</a> (3)</li>
	<li><a href="http://lobach.info/develop/svn/svn-commit-tutorial/" title="Советы по фиксациям в SVN (16.04.2009)">Советы по фиксациям в SVN</a> (0)</li>
	<li><a href="http://lobach.info/develop/svn/svn-links/" title="Снова про использование Subversion (29.02.2008)">Снова про использование Subversion</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/svn/svn-externals/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Как слить изменения между ветками. Часть 1</title>
		<link>http://lobach.info/develop/svn/branch-merging-part1/</link>
		<comments>http://lobach.info/develop/svn/branch-merging-part1/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 16:13:55 +0000</pubDate>
		<dc:creator>Лобач Олег</dc:creator>
				<category><![CDATA[SVN]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[контроль версий]]></category>

		<guid isPermaLink="false">http://lobach.info/develop/svn/branch-merging-part1/</guid>
		<description><![CDATA[Для меня самым непонятным моментом в использовании SVN было слияние веток, т.е. копирование изменений из одной ветки в другую.  Чаще всего это делается для синхронизации различных веток (например, релизных) с основной (trunk).
В начале я хочу дать немного теории, а потом покажу на примере как это делать.
Для копирования изменений служит команда merge. Принцип действия этой [...]]]></description>
			<content:encoded><![CDATA[<p>Для меня самым непонятным моментом в использовании SVN было слияние веток, т.е. копирование изменений из одной ветки в другую.  Чаще всего это делается для синхронизации различных веток (например, релизных) с основной (trunk).</p>
<p>В начале я хочу дать немного теории, а потом покажу на примере как это делать.</p>
<p>Для копирования изменений служит команда merge. Принцип действия этой команды очень прост – сравнивается два состояния хранилища, и выявленные изменения вносит в рабочую копию. Вот этот момент (внесение изменений именно в рабочую копию) был первым моим открытием. До чтения документации я считал, что изменения вносятся сразу в хранилище. О второй неожиданности я расскажу подробнее.</p>
<p>Как большинство новичков, я предполагал, что для переноса изменений из одной ветки в другую, нужно в аргументах команды merge указать исходную ветку и приемную ветку. При чтении мануала я крайне удивился&nbsp;&mdash; оказывается, нужно сравнивать не текущие состояния сливаемых веток, а состояния исходной ветки с момента последнего слияния (или выделения отдельной ветки) и текущим состоянием (или любым другим прошлым). Это было настоящим открытием для меня! <em>Так что, мой вам совет – читайте документацию, там бывает можно найти много интересного и полезного. (</em>Глава из официального руководства, посвященная <a href="http://svnbook.red-bean.com/nightly/ru/svn.branchmerge.copychanges.html">копированию изменений</a>)</p>
<p>Классическим способом использования SVN, при котором может понадобится слияние, является вынесение в отдельную ветку разработки, потенциально опасной для стабильности кода в основной ветке. В этом случае создается отдельная ветка (о том, как это сделать я рассказывал в отдельной <a href="/develop/svn/making-branches/" title="Как и зачем делать ветки">заметке</a>), в которую копируется основная ветка. После чего разработчик (или группа разработчиков) независимо от остальных начинает кодить новый функционал. Остальные разработчики продолжают работать с основной веткой (или создают свои ветки для кодинга &laquo;опасных&raquo; участков). В случае применения такого способа разработки возникает опастность внесения настолько большого количества изменений в основную ветку и ветку &laquo;опасной&raquo; разработки, что объединить их потребует огромных усилий (или вообще будет невозможно). Чтобы этого не случилось, есть простое решение&nbsp;&mdash; с определенной периодичностью или при определенных событиях (например, внесение существенных изменений в основню ветку) сливать изменения основной ветки в ветку разработчика. Тогда финальное слияние нового функционала и основной ветки пройдет достаточно гладко и просто&nbsp;&mdash; ведь большая часть изменений основной ветки уже содержится в ветке разработчика.</p>
<p>На этом небольшой экскурс в теорию закончу и во второй части покажу на примере как выполнять слияние изменений в ветках.</p>

	Tags: <a href="http://lobach.info/tag/svn/" title="SVN" rel="tag">SVN</a>, <a href="http://lobach.info/tag/tutorial/" title="tutorial" rel="tag">tutorial</a>, <a href="http://lobach.info/tag/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d1%8c-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b9/" title="контроль версий" rel="tag">контроль версий</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/some/branch-merging-part2/" title="Как слить изменения между ветками. Часть 2 (27.01.2008)">Как слить изменения между ветками. Часть 2</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/making-branches/" title="Как и Зачем делать ветки? (18.12.2007)">Как и Зачем делать ветки?</a> (3)</li>
	<li><a href="http://lobach.info/develop/svn/svn-externals/" title="Внешние зависимости (11.02.2008)">Внешние зависимости</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/svn-commit-tutorial/" title="Советы по фиксациям в SVN (16.04.2009)">Советы по фиксациям в SVN</a> (0)</li>
	<li><a href="http://lobach.info/develop/svn/svn-links/" title="Снова про использование Subversion (29.02.2008)">Снова про использование Subversion</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/svn/branch-merging-part1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Новая версия TortoiseSVN</title>
		<link>http://lobach.info/develop/svn/new-version-tortoisesvn/</link>
		<comments>http://lobach.info/develop/svn/new-version-tortoisesvn/#comments</comments>
		<pubDate>Tue, 25 Dec 2007 19:38:57 +0000</pubDate>
		<dc:creator>Лобач Олег</dc:creator>
				<category><![CDATA[SVN]]></category>
		<category><![CDATA[инструменты]]></category>

		<guid isPermaLink="false">http://lobach.info/develop/svn/new-version-tortoisesvn/</guid>
		<description><![CDATA[21 декабря вышла новая версия TortoiseSVN&#160;&#8212; 1.4.6. В этом релизе исправлено несколько небольших ошибок, в частности, утечку памяти в контекстном меню проводника.
Обновляемся отсюда

	Tags: SVN, инструменты

	Похожие записи
	
	Советы по фиксациям в SVN (0)
	Снова про использование Subversion (0)
	Как слить изменения между ветками. Часть 2 (1)
	Как слить изменения между ветками. Часть 1 (1)
	Как и Зачем делать ветки? (3)


]]></description>
			<content:encoded><![CDATA[<p>21 декабря вышла новая версия <a TITLE="Домашняя страница TortoiseSVN" HREF="http://tortoisesvn.net/">TortoiseSVN</a>&nbsp;&mdash; 1.4.6. В этом релизе исправлено несколько небольших ошибок, в частности, утечку памяти в контекстном меню проводника.</p>
<p>Обновляемся <a TITLE="Страница для скачивания TortoiseSVN" HREF="http://tortoisesvn.net/downloads">отсюда</a></p>

	Tags: <a href="http://lobach.info/tag/svn/" title="SVN" rel="tag">SVN</a>, <a href="http://lobach.info/tag/%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d1%8b/" title="инструменты" rel="tag">инструменты</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/svn/svn-commit-tutorial/" title="Советы по фиксациям в SVN (16.04.2009)">Советы по фиксациям в SVN</a> (0)</li>
	<li><a href="http://lobach.info/develop/svn/svn-links/" title="Снова про использование Subversion (29.02.2008)">Снова про использование Subversion</a> (0)</li>
	<li><a href="http://lobach.info/some/branch-merging-part2/" title="Как слить изменения между ветками. Часть 2 (27.01.2008)">Как слить изменения между ветками. Часть 2</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/branch-merging-part1/" title="Как слить изменения между ветками. Часть 1 (22.01.2008)">Как слить изменения между ветками. Часть 1</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/making-branches/" title="Как и Зачем делать ветки? (18.12.2007)">Как и Зачем делать ветки?</a> (3)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/svn/new-version-tortoisesvn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как и Зачем делать ветки?</title>
		<link>http://lobach.info/develop/svn/making-branches/</link>
		<comments>http://lobach.info/develop/svn/making-branches/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 10:45:07 +0000</pubDate>
		<dc:creator>Лобач Олег</dc:creator>
				<category><![CDATA[SVN]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[контроль версий]]></category>

		<guid isPermaLink="false">http://lobach.info/develop/svn/making-branches/</guid>
		<description><![CDATA[Сегодня я хочу рассказать о замечательной возможности системы контроля версий&#160;&#8212; создании веток.
Приведу определение ветки из моей статьи:
Ветка (Branch)&#160;&#8212; это направление разработки, существующее независимо от других направлений, но имеющее общую с ними историю. Фактически представляет собой копию проекта (или его части) в определенный момент времени и совокупности фиксаций изменений. Чаще всего ветки используются для хранения различных [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня я хочу рассказать о замечательной возможности системы контроля версий&nbsp;&mdash; создании веток.</p>
<p>Приведу определение ветки из моей <a href="/svn-intro/">статьи</a>:</p>
<p><em><strong>Ветка</strong> (Branch)&nbsp;&mdash; это направление разработки, существующее независимо от других направлений, но имеющее общую с ними историю. Фактически представляет собой копию проекта (или его части) в определенный момент времени и совокупности фиксаций изменений. Чаще всего ветки используются для хранения различных релизов проекта. Кроме этого ветки могут применяться для изоляции группы правок, которые могут нарушить работоспособность всего кода.</em><br />
<span id="more-8"></span><br />
Из определения вытекает ответ на вторую часть вопроса заголовка: ветки используются для создания независимых вариантов проекта с ведением собственной истории. Чтобы было понятнее, я опишу рекомендуемую разработчиками системы практику применения этой функции.</p>
<p>Основной процесс разработки обычно ведется в специальной ветке&nbsp;&mdash; trunk. Там разрабатывается новый функционал или переписывается код для уже реализованных функций проекта.</p>
<p>Ветки рекомендуется создавать при релизах проекта и при разработке, опасной для остального кода. Например, вам нужно полностью переписать какой-нибудь модуль в работающей системе. Чтобы система оставалась работоспособной и в процессе переделки модуля (и при этом вы имели возможность пользоваться преимуществами контроля версий), вам нужно текущее состояние системы (т.е. ветку trunk) скопировать в новую ветку и уже в ней продолжать разработку. После завершения переписывания модуля, когда убедились, что система работает, нужно перенести все наработки в основную ветку. Как это сделать, я расскажу в следующем посте.</p>
<p>А теперь я покажу как создаются ветки. Команда для этого очень простая:<br />
<code>svn copy http://svn.example.com/repos/proj/trunk \<br />
http://svn.example.com/repos/proj/branches/my-own-branch \<br />
-m "Creating a private branch of /proj/trunk."</code><br />
Т.е. создание ветки&nbsp;&mdash; это фактически копирование определенного каталога в новое место. Все очень просто.</p>
<p>Если пользоваться <a href="http://tortoisesvn.net/">win-клиентом</a>, то сделать ветку тоже не сложно:</p>
<ol>
<li>Вызываете контекстное меню проводника и запускаете &laquo;браузер хранилища&raquo; (Repo-browser).<img src="http://lobach.info/wp-content/uploads/2007/12/svn-branch-step-1.png" alt="Контекстное меню проводника" /></li>
<li>В репо-браузере выбираете ветку, от которой нужно &laquo;отпочковать&raquo; новую (чаще всего это будет ветка trunk), и в контекстном меню жмите на &laquo;Copy to...&raquo;.<img src="http://lobach.info/wp-content/uploads/2007/12/svn-branch-step-2.png" alt="Контекстное меню браузера хранилища" align="middle" /></li>
<li>В появившемся окне вводите новое местоположение ветка (чаще всего ветки создаются в каталоге branches).<img src="http://lobach.info/wp-content/uploads/2007/12/svn-branch-step-3.png" alt="Окно ввода местоположения новой ветки" /></li>
<li>В следующем окне вводите комментарий. И вуаля&nbsp;&mdash; новая ветка готова!</li>
</ol>
<p>Как вы видите, создать новую ветку очень просто. А их применение во многих случаях решает много проблем координации разработки.</p>

	Tags: <a href="http://lobach.info/tag/svn/" title="SVN" rel="tag">SVN</a>, <a href="http://lobach.info/tag/tutorial/" title="tutorial" rel="tag">tutorial</a>, <a href="http://lobach.info/tag/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d1%8c-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b9/" title="контроль версий" rel="tag">контроль версий</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/some/branch-merging-part2/" title="Как слить изменения между ветками. Часть 2 (27.01.2008)">Как слить изменения между ветками. Часть 2</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/branch-merging-part1/" title="Как слить изменения между ветками. Часть 1 (22.01.2008)">Как слить изменения между ветками. Часть 1</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/svn-externals/" title="Внешние зависимости (11.02.2008)">Внешние зависимости</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/svn-commit-tutorial/" title="Советы по фиксациям в SVN (16.04.2009)">Советы по фиксациям в SVN</a> (0)</li>
	<li><a href="http://lobach.info/develop/svn/svn-links/" title="Снова про использование Subversion (29.02.2008)">Снова про использование Subversion</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/svn/making-branches/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Введение в Subversion</title>
		<link>http://lobach.info/develop/svn/%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-subversion/</link>
		<comments>http://lobach.info/develop/svn/%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-subversion/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 10:30:50 +0000</pubDate>
		<dc:creator>Лобач Олег</dc:creator>
				<category><![CDATA[SVN]]></category>
		<category><![CDATA[контроль версий]]></category>
		<category><![CDATA[разработка]]></category>
		<category><![CDATA[статьи]]></category>

		<guid isPermaLink="false">http://lobach.info/develop/svn/%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-subversion/</guid>
		<description><![CDATA[С любезного разрешения главного редактора .hostinfo, я разместил в этом блоге свою статью &#171;Версии под контролем&#187;.
Анонс статьи на .hostinfo:
Одним из инструментов, применяемых разработчиками  программного обеспечения, являются системы контроля версий исходного кода. В  настоящее время существует несколько таких систем: CVS (наиболее известная и  распространенная), Visual SourceSafe от Microsoft, StarTeam от Borland, Rational  [...]]]></description>
			<content:encoded><![CDATA[<p>С любезного разрешения главного редактора <a href="http://hostinfo.ru/">.hostinfo</a>, я разместил в этом блоге свою статью &laquo;Версии под контролем&raquo;.</p>
<p>Анонс статьи на <a href="http://hostinfo.ru/">.hostinfo</a>:</p>
<p>Одним из инструментов, применяемых разработчиками  программного обеспечения, являются системы контроля версий исходного кода. В  настоящее время существует несколько таких систем: CVS (наиболее известная и  распространенная), Visual SourceSafe от Microsoft, StarTeam от Borland, Rational  ClearCase от IBM. Кроме перечисленных продуктов  есть ряд других, в том числе Subversion. Именно эта система является темой данной  статьи. В ней приведены общие сведения, на примерах показан принцип работы с  системой.</p>
<p>Со статьей можете ознакомиться <a href="/svn-intro/">тут</a></p>

	Tags: <a href="http://lobach.info/tag/svn/" title="SVN" rel="tag">SVN</a>, <a href="http://lobach.info/tag/%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d1%8c-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d0%b9/" title="контроль версий" rel="tag">контроль версий</a>, <a href="http://lobach.info/tag/%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0/" title="разработка" rel="tag">разработка</a>, <a href="http://lobach.info/tag/article/" title="статьи" rel="tag">статьи</a><br />

	<h4>Похожие записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://lobach.info/develop/svn/svn-commit-tutorial/" title="Советы по фиксациям в SVN (16.04.2009)">Советы по фиксациям в SVN</a> (0)</li>
	<li><a href="http://lobach.info/develop/svn/svn-links/" title="Снова про использование Subversion (29.02.2008)">Снова про использование Subversion</a> (0)</li>
	<li><a href="http://lobach.info/some/branch-merging-part2/" title="Как слить изменения между ветками. Часть 2 (27.01.2008)">Как слить изменения между ветками. Часть 2</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/branch-merging-part1/" title="Как слить изменения между ветками. Часть 1 (22.01.2008)">Как слить изменения между ветками. Часть 1</a> (1)</li>
	<li><a href="http://lobach.info/develop/svn/making-branches/" title="Как и Зачем делать ветки? (18.12.2007)">Как и Зачем делать ветки?</a> (3)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://lobach.info/develop/svn/%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b2-subversion/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
