<?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>SimpleCoding.org &#187; Subversion</title>
	<atom:link href="http://www.simplecoding.org/category/sv/feed" rel="self" type="application/rss+xml" />
	<link>http://www.simplecoding.org</link>
	<description>Блог о программировании</description>
	<lastBuildDate>Fri, 27 Jan 2012 18:27:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Phing: backup и сохранение в Subversion базы данных</title>
		<link>http://www.simplecoding.org/phing-backup-i-soxranenie-v-subversion-bazy-dannyx.html</link>
		<comments>http://www.simplecoding.org/phing-backup-i-soxranenie-v-subversion-bazy-dannyx.html#comments</comments>
		<pubDate>Mon, 29 Jun 2009 13:47:29 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Phing]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=859</guid>
		<description><![CDATA[В этой заметке я хочу показать несложный пример использования Phing для создания резервных копий базы данных (MySQL) и их отправки в репозиторий Subversion. Ни для одной из этих операций готовых задач для Phing я не нашел. Но, если подумать, они и не очень нужны. Ведь с помощью Phing можно выполнить любую команду. Т.е. если вы [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_861" class="wp-caption alignnone" style="width: 258px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/06/phing_mysql_subversion.png" alt="phing mysql subversion" title="phing mysql subversion" width="248" height="141" class="size-full wp-image-861" style="float:left" /><p class="wp-caption-text"> </p></div>
<p>В этой заметке я хочу показать несложный пример использования <a href="http://phing.info/trac/">Phing</a> для создания резервных копий базы данных (<strong>MySQL</strong>) и их отправки в репозиторий <strong>Subversion</strong>.</p>
<p>Ни для одной из этих операций готовых задач для <strong>Phing</strong> я не нашел. Но, если подумать, они и не очень нужны. Ведь с помощью Phing можно выполнить любую команду. Т.е. если вы знаете как решить задачу с помощью консоли, значит вы можете автоматизировать решение с помощью Phing.</p>
<p><em>Примечание</em>. Если вы слышите слово Phing впервые, то, думаю, вам будет интересно почитать статью <a href="http://www.simplecoding.org/izbavlyaemsya-ot-rutinnyx-operacij-s-pomoshhyu-phing.html">Программирование на PHP. Избавляемся от рутинных операций с помощью Phing</a>, а может быть и весь раздел <a href="http://www.simplecoding.org/category/phing">Phing</a> этого блога <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Возвращаемся к нашей задаче.</strong></p>
<p>Для создания резервной копии базы можно использовать утилиту <strong>mysqldump</strong>. В её параметрах нужно указать имя пользователя базы, его пароль и название базы. Дополнительно нужно задать имя файла в который мы сохраняем дамп.</p>
<p>Например, так<br />
<span id="more-859"></span></p>
<pre class="brush: bash">mysqldump -uпользователь -pпароль название_базы > dump.sql</pre>
<p>Для сохранения файла в <strong>Subversion</strong> используется команда <strong>commit</strong>.</p>
<pre class="brush: bash">svn.exe commit -m “db_backup” --username имя --password пароль имя_файла</pre>
<p>Здесь мы указываем текст сообщения (после параметра -m), имя пользователя Subversion, его пароль и имя файла, который нужно сохранить.</p>
<p><em>Примечание</em>. Подробнее об этой системе контроля версий можно почитать в разделе <a href="http://www.simplecoding.org/category/sv">Subversion</a>.</p>
<p>Теперь рассмотрим build-файл.</p>
<pre class="brush: xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project name="DbBackup" default="commit" basedir="."&gt;

	&lt;property name="DUMP_FILE" value="dump.sql" /&gt;
	&lt;property name="MYSQL_PATH" value="путь_к_mysql" /&gt;
	&lt;property name="DB_NAME" value="имя_базы_данных" /&gt;
	&lt;property name="DB_HOST" value="localhost" /&gt;
	&lt;property name="DB_USER" value="имя_пользователя_mysql" /&gt;
	&lt;property name="DB_PASS" value="пароль_mysql" /&gt;

	&lt;property name="SVN_USER" value="имя_пользователя_subversion" /&gt;
	&lt;property name="SVN_PASS" value="пароль_subversion" /&gt;

	&lt;target name="backup"&gt;
		&lt;exec command="${MYSQL_PATH}mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} &gt; ${DUMP_FILE}" dir="." /&gt;
	&lt;/target&gt;

	&lt;target name="commit" depends="backup"&gt;
		&lt;exec command="svn.exe commit -m &quot;db_backup&quot; --username ${SVN_USER} --password ${SVN_PASS} ${DUMP_FILE}" dir="." /&gt;
	&lt;/target&gt;
&lt;/project&gt;</pre>
<p>Как видите, большую часть файла занимают свойства (имена, пароли, адрес сервера, размещение mysqldump).</p>
<p>В принципе, их можно было указать прямо в командах, но в большинстве случаев build-файлы гораздо сложнее. И сложно сказать заранее, что какое-то значение будет использован только один раз. Поэтому удобнее задать их один раз в начале файла.</p>
<p>Для выполнение наших команд мы использовали стандартную задачу <strong>exec</strong>. Как несложно догадаться она просто выполняет указанную команду.</p>
<p>Обратите внимание, что внутри команды использовать кавычки нельзя. Их заменяют эскейп последовательностью <code>&quot;</code>.</p>
<p>Думаю, вы догадались, что используя такие build-файлы можно автоматизировать работу с любыми консольными программами.</p>
<p>Конечно, создание самого build-файла отнимает немного времени, но вы быстро его вернете и, кроме того, будете делать меньше ошибок (особенно если нужно выполнять длинные последовательности операций).</p>
<p>И в заключение, небольшой совет. По-умолчанию Phing <strong>не</strong> выводит результат выполнения команды. Т.е. вы не знаете выполнилась на самом деле команда или нет.</p>
<p>Например, если в данном примере написать <code>sbn.exe</code> вместо <code>svn.exe</code> и запустить этот build-файл, то в результате вы увидите обычное сообщение <code>BUILD FINISHED</code>. Естественно, новая версия файла в репозитории сохранена не будет.</p>
<p>Поэтому на этапе тестирования очень полезно запускать phing с параметром -verbose.</p>
<pre class="brush: bash">phing -verbose</pre>
<p>В этом случае вы увидите множество интересных сообщений и в том числе</p>
<p>“sbn.exe” не является внутренней или внешней командой …</p>
<p>После того, как вы убедитесь, что всё работает правильно, можно перейти обычный режим.</p>
<p>Время – деньги. Цените его! <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/phing-backup-i-soxranenie-v-subversion-bazy-dannyx.html/feed</wfw:commentRss>
		<slash:comments>66</slash:comments>
		</item>
		<item>
		<title>Обновляем WordPress с помощью Subversion</title>
		<link>http://www.simplecoding.org/obnovlyaem-wordpress-s-pomoshhyu-subversion.html</link>
		<comments>http://www.simplecoding.org/obnovlyaem-wordpress-s-pomoshhyu-subversion.html#comments</comments>
		<pubDate>Tue, 12 Aug 2008 15:26:33 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Web разработка]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=406</guid>
		<description><![CDATA[В этой статье я расскажу о том, как можно немного упростить обновление WordPress. Метод особенно удобен, если вам нужно регулярно тестировать плагины на совместимость с новыми версиями движка. В общем-то, особых секретов нет. Скачать дистрибутив WordPress можно как в виде zip архива, так и с помощью Subversion. Преимущества второго метода очевидны. Вы сможете с помощью [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_407" class="wp-caption alignnone" style="width: 246px"><img src="http://www.simplecoding.org/wp-content/uploads/2008/08/wp_subversion.png" alt="Обновление WordPress с помощью Subversion" title="wp_subversion" width="236" height="141" class="size-full wp-image-407" style="float:left" /><p class="wp-caption-text"> </p></div>
<p>В этой статье я расскажу о том, как можно немного упростить <strong>обновление WordPress</strong>. Метод особенно удобен, если вам нужно регулярно <strong>тестировать плагины</strong> на совместимость с новыми версиями движка.</p>
<p>В общем-то, особых секретов нет. Скачать дистрибутив WordPress можно как в виде zip архива, так и с помощью <a href="http://subversion.tigris.org/">Subversion</a>.</p>
<p>Преимущества второго метода очевидны. Вы сможете с помощью всего <strong>одной команды</strong> переустановить движок. Причем установить можно как новую версию, так и предыдущую.</p>
<p>Обычным способом вам бы пришлось качать архив, удалять файлы старой версии (не всегда), распаковывать архив, проверять, что находится в wp-content (там могут быть более ранние версии плагинов).</p>
<p>Т.е. используя Subversion вы однозначно сэкономите время, и кроме того, будете уверены, что никакие ваши файлы не будут случайно перезаписаны.</p>
<p><em>Примечание</em>. Если вы хотите узнать больше об этой системе управления версиями, можете почитать <a href="http://www.simplecoding.org/category/sv">раздел Subversion</a> этого блога и не забывайте об официальной документации (устанавливается из дистрибутива, очень рекомендую почитать).</p>
<p>Теперь рассмотрим процесс получения дистрибутива.<br />
<span id="more-406"></span><br />
1)	<strong>Создаем папку</strong>, в которую будем устанавливать WordPress. Открываем консоль и переходим в эту папку.</p>
<p><em>Примечание</em>. Я буду рассказывать на примере консоли. Но, естественно, вы можете воспользоваться SVN клиентом.</p>
<p>2)	<strong>Определяем, какая версия WordPress вам нужна</strong>.</p>
<p>Здесь все просто. Заходим на страницу <a href="http://trac.wordpress.org/browser/">http://trac.wordpress.org/browser/</a> и изучаем структуру репозитория.</p>
<p>Основная ветка разработки называется <code>trunk</code>. Это самая последняя версия плюс новые исправления. Кстати, когда я последний раз смотрел, ее возраст был 17 часов.</p>
<p>Ветки, которые распространяются (или распространялись) в виде архивов, находятся в папке <code>tags</code>.</p>
<p>Теперь <strong>определяем адрес</strong> выбранной ветки. Первая часть адреса для всех веток одинакова &#8211; <code>http://svn.automattic.com/wordpress/</code>. К ней добавляем путь в репозитории.</p>
<p>Т.е. основная ветка имеет адрес http://svn.automattic.com/wordpress/trunk<br />
Версия 2.6 доступна по адресу http://svn.automattic.com/wordpress/tags/2.6 и т.д.</p>
<p>3)	<strong>Загружаем выбранную версию</strong></p>
<p>Для этого выполняем команду<br />
<code>svn checkout адрес_версии .</code></p>
<p>Например,<br />
<code>svn checkout http://svn.automattic.com/wordpress/trunk .</code></p>
<p><strong>Обратите внимание</strong>. После слова <code>trunk</code> стоит пробел и точка. Это означает, что загружать содержимое <code>trunk</code> нужно в текущую папку.</p>
<p>4) <strong>Настраиваем WordPress</strong>. Тут все, как и при обычной установке из архива. Нужно переименовать файл <code>wp-config-sample.php</code> в <code>wp-config.php</code> и указать в нем параметры подключения к базе данных. И после этого зайти на страницу <code>sitename.com/wp-admin/install.php</code></p>
<p>На этом этапе нужно учесть два нюанса.<br />
<em>Первый</em>. В дистрибутивы WordPress файл <code>wp-config.php</code> не входит, поэтому он останется неизменным при обновлении. Но <code>wp-config-sample.php</code> меняется от версии к версии, поэтому для нормальной работы движка, возможно, потребуется вручную обновить <code>wp-config.php</code>.</p>
<p><em>Второй</em>. WordPress сам обновляет базу данных. Но процесс обновления подразумевает установку более новой версии движка. С помощью Subversion вы можете возвратиться к любой предыдущей версии. Правильное обновление базы при этом, насколько я знаю, никто не гарантирует. В такой ситуации я могу порекомендовать только создание бекапов базы для каждой из версий движка.</p>
<p>4)	Обновление дистрибутива. Выполняется командой <code>svn update ...</code>. Например:<br />
<code>svn update http://svn.automattic.com/wordpress/trunk .</code></p>
<p>5)	Переключение между версиями. Команда <code>svn switch ...</code>. Например, для перехода на версию 2.3 выполняем команду:<br />
<code>svn switch http://svn.automattic.com/wordpress/tags/2.3 .</code></p>
<p>Как видите, большинство действий выполняются всего одной коммандой.</p>
<p>Теперь пару замечаний об <strong>обновлении движка на сервере хостера</strong>.</p>
<p>Все приведенные в этой статье советы и рекомендации можно использовать для обновления WordPress на «боевом» сервере.</p>
<p>Естественно у вас должна быть возможность запускать svn. Т.е. <strong>нужен SSH-доступ</strong>, а на многих shared хостингах его нет.</p>
<p>Кроме того, очень желательно <strong>заранее</strong> проверить, что все плагины будут работать с новой версией и <strong>сделать бекап</strong>.</p>
<p>В общем, если нужно администрировать один блог, то выигрыш от использования Subversion незначительный. Но если вам приходится обновлять десятки дистрибутивов WordPress, размещенных на VPS или выделенном сервере, то вариант с Subversion выглядит интереснее загрузки кучи файлов по FTP или распаковки архива на сервере.</p>
<p>Удачного апгрейда!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/obnovlyaem-wordpress-s-pomoshhyu-subversion.html/feed</wfw:commentRss>
		<slash:comments>38</slash:comments>
		</item>
		<item>
		<title>Subversion – использование нескольких веток разработки</title>
		<link>http://www.simplecoding.org/subversion-ispolzovanie-vetok-razrabotki.html</link>
		<comments>http://www.simplecoding.org/subversion-ispolzovanie-vetok-razrabotki.html#comments</comments>
		<pubDate>Sun, 06 Apr 2008 07:37:12 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/subversion-ispolzovanie-vetok-razrabotki.html</guid>
		<description><![CDATA[В этой статье я продолжу рассказ об использовании Subversion – одной из самых популярных на сегодняшний день систем контроля версий. В этот раз речь пойдет об использовании нескольких веток разработки. Прежде всего, разберем, в какой ситуации может понадобиться несколько веток. Вариантов множество, но подробно анализировать мы их не будем, а просто рассмотрим конкретный пример. Допустим, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.simplecoding.org/wp-content/uploads/2008/01/subversion_logo.png" alt="Картинка для subversion" style="float: left" /><br />
В этой статье я продолжу рассказ об использовании <a href="http://subversion.tigris.org/">Subversion</a> – одной из самых популярных на сегодняшний день систем контроля версий.</p>
<p>В этот раз речь пойдет об использовании нескольких <strong>веток разработки</strong>.</p>
<p>Прежде всего, разберем, в какой ситуации может понадобиться несколько веток. Вариантов множество, но подробно анализировать мы их не будем, а просто рассмотрим конкретный пример.</p>
<p>Допустим, вы закончили разработку первой версии web приложения (или просто сайта). Теперь нужно перенести его на сервер хостера. В большинстве случаев при этом придется изменить параметры подключения к базе данных, отключить вывод подробного описания ошибок, profiling и т.п. Скорее всего, эти <strong>изменения затронут несколько файлов</strong>.</p>
<p>После отправки файлов на сервер, вы решили продолжить работу над проектом. Для этого, все настройки необходимо <strong>вернуть в исходное состояние</strong>. И так каждый раз при обновлении приложения на сервере. Думаю, никому не нужно объяснять, что это очень не удобно и может привести к ошибкам.</p>
<p>Как раз в этом случае нам и пригодится возможность Subversion создавать параллельные ветки разработки.<br />
<span id="more-268"></span><br />
Идея простая. <strong>Создаем ветку</strong> для серверной версии проекта. <strong>Вносим</strong> в нее необходимые <strong>изменения</strong> и «заливаем» файлы на сервер. После этого <strong>переключаемся</strong> на основную ветку (файлы с настройками возвращаются в исходное состояние) и <strong>продолжаем разработку</strong>.</p>
<p>Одно из основных достоинств веток Subversion в том, что можно «сливать» <strong>любые</strong> изменения из одной ветки в другую. Таким образом, мы можем внести в ветку для сервера изменения из основной ветки так, что параметры подключения к БД <strong>останутся неизменными</strong>.</p>
<p>После переноса изменений нам останется только скопировать обновленные файлы на сервер.</p>
<p>Теперь <strong>рассмотрим конкретный пример</strong>.</p>
<p>Допустим, в репозитории проекта мы создали две папки:<br />
<code>trunk</code> – для основной ветки разработки;<br />
<code>branches</code> – для дополнительных веток.</p>
<p><strong>Примечание</strong>. О том, как это сделать можно прочитать в статье «<a href="http://www.simplecoding.org/upravlenie-proectami-subversion.html">Эффективное управление проектами (Subversion)</a>».</p>
<p>На данный момент проект в рабочем состоянии и находится в папке <code>trunk</code>.</p>
<p>Как мы и говорили, <strong>создаем новую ветку</strong>, в папке <code>branches</code>. В <a href="http://www.simplecoding.org/upravlenie-proectami-subversion-rabochie-kopii.html">прошлой статье</a> я немного рассказывал о ветках и переключении между ними, поэтому сейчас напомню только основные моменты.</p>
<p>Команда</p>
<p><code>svn copy file:///path_to_project/trunk<br />
file:///path_to_project/brunches/web<br />
-m “Ветка для размещения проекта на сервере”</code></p>
<p>создаст новую ветку разработки, которая будет размещена в папке <code>brunches/web</code> репозитория.</p>
<p><strong>Примечание</strong>. При создании новой ветки настоящего копирования файлов не происходит. Это предотвращает черезмерное увеличение репозитория. Тем не менее, с точки зрения пользователя работа с веткой ничем не отличается от работы с настоящей копией.</p>
<p><strong>Переключаемся на созданную ветку</strong></p>
<p><code>svn switch file:///path_to_project/brunches/web</code></p>
<p>Эта команда создаст <strong>рабочую копию</strong> ветки.<br />
Вносим в нее любые изменения (например, меняем параметры подключения к базе данных) и выполняем команду <code>commit</code> (т.е. сохраняем изменения в репозитории).</p>
<p>Очень важно писать <strong>осмысленные</strong> комментарии при сохранении данных, т.к. по ним придется ориентироваться в различиях между ветками. Фразы вроде «Все пофиксил» или «Куча мелких исправлений» не говорят ни о чем.</p>
<p>Теперь <strong>переключаемся</strong> на trunk</p>
<p><code>svn switch file:///path_to_project/trunk</code></p>
<p>И <strong>продолжаем работу</strong>.</p>
<p>В какой-то момент мы нашли и <strong>исправили ошибку</strong> в одном из файлов проекта. Теперь нужно исправить эту же ошибку на сервере. При этом в файл, который содержал ошибку, были внесены экспериментальные изменения, которые <strong>не должны</strong> попасть на сервер.</p>
<p>Т.е. нам нужно «слить» <strong>часть</strong> изменений из одной ветки в другую.</p>
<p>Прежде всего, нужно четко знать <strong>номера ревизий</strong>, которые содержат нужные изменения. Тут как раз и пригодятся созданные комментарии.</p>
<p>Посмотреть <strong>историю изменений</strong> можно с помощью команды</p>
<p><code>svn log</code></p>
<p>Она выведет список ревизий с комментариями. С помощью дополнительных параметров этой команды можно <strong>ограничить список</strong>:</p>
<p><code>svn log --stop-on-copy</code> – выводит перечень ревизий между последней и ближайшей, в которой была выполнена операция копирования (создания ветки)<br />
<code>svn log -r 100:200</code> – список изменений между ревизиями 100 и 200<br />
<code>svn log -r 100:HEAD</code> – между ревизией 100 и последней ревизией проекта.</p>
<p>Допустим, мы выяснили, что нужные нам изменения сделаны в ревизиях 205 и 206 основной ветки проекта.</p>
<p>Теперь <strong>переключаемся на ветку</strong> <code>brunches/web</code></p>
<p><code>svn switch file:///path_to_project/brunches/web</code></p>
<p>И <strong>выполняем слияние</strong></p>
<p><code>svn merge -r 205:206 file:///path_to_project/trunk</code></p>
<p>Эта команда выполнит <strong>слияние изменений</strong> из ревизий 205 и 206 ветки <code>trunc</code> в текущую папку (на данный момент в этой папке находится рабочая копия ветки <code>brunches/web</code>).</p>
<p>Теперь можно <strong>зафиксировать изменения</strong> ветки <code>brunches/web</code>  в репозитории с помощью команды <code>commit</code> и <strong>скопировать исправленную версию приложения на сервер</strong>.</p>
<p><strong>Очень важно</strong>. При выполнении команды <code>commit</code> обязательно в комментарии укажите номера ревизий, из которых взяты изменения (например, «изменения из trunk -r 205:206»). Это позволит избежать повторного копирования этих изменений в дальнейшем.</p>
<p>После этого, можно опять переключаться на основную ветку (<code>trunk</code>) и продолжать разработку.</p>
<p>Как видите, все довольно просто, а главное – удобно.</p>
<p><strong>Примечание</strong>. Вам не обязательно использовать командную строку. Существует множество графических клиентов для Subversion, которые предоставляют удобный доступ к командам. Например, <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a> или <a href="http://subclipse.tigris.org/">Subclipse</a>.</p>
<p><strong>Заключение</strong></p>
<p>Эта статья не является руководством по использованию веток, я просто привел пример их использования, который, на мой взгляд, удачно отражает их преимущества. Причем пример ориентирован на индивидуальных разработчиков или команды из двух-трех человек. Если вы хотите серьезно использовать Subversion при разработке, советую почитать книгу <a href="http://svnbook.red-bean.com/nightly/ru/index.html">Управление версиями в Subversion</a>. Это полное руководство об этой замечательной системе управления версиями.</p>
<p>Удачи!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/subversion-ispolzovanie-vetok-razrabotki.html/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Web разработка. Эффективное управление проектами (Subversion) – рабочие копии</title>
		<link>http://www.simplecoding.org/upravlenie-proectami-subversion-rabochie-kopii.html</link>
		<comments>http://www.simplecoding.org/upravlenie-proectami-subversion-rabochie-kopii.html#comments</comments>
		<pubDate>Tue, 15 Jan 2008 13:55:52 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/upravlenie-proectami-subversion-rabochie-kopii.html</guid>
		<description><![CDATA[В прошлой статье мы начали знакомство с одной из самых популярных на сегодняшний день систем управления версиями – Subversion. На данный момент мы создали начальную структуру проекта и поместили ее в хранилище Subversion. Напомню, для нашего проекта в хранилище создано две папки: trunk – в ней будет находится основная ветка проекта; и branches – для [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.simplecoding.org/wp-content/uploads/2008/01/subversion_logo.png" alt="Картинка для subversion" style="float: left" /><br />
В <a href="http://www.simplecoding.org/upravlenie-proectami-subversion.html">прошлой статье</a> мы начали знакомство с одной из самых популярных на сегодняшний день систем управления версиями – <a href="http://subversion.tigris.org/">Subversion</a>. На данный момент мы создали начальную структуру проекта и поместили ее в хранилище Subversion.</p>
<p>Напомню, для нашего проекта в хранилище создано две папки:<br />
<code>trunk</code> – в ней будет находится основная ветка проекта;<br />
и <code>branches</code> – для экспериментальных веток.</p>
<p>Теперь нужно создать <strong>рабочую копию</strong>. Для этого переходим в папку, которую будем использовать для работы с проектом, и выполняем команду:<br />
<code>svn checkout file:///e:/docs/svn/my_project/trunk</code></p>
<p>Обратите внимание, что к пути, указывающему размещение хранилища, мы добавили <code>/trunk</code>. Это означает, что мы создаем рабочую копию основной ветки проекта.</p>
<p>Т.к. на данном этапе проект пуст, то в папке с рабочей копией будет размещена только папка &#034;.svn&#034; (скрытая) со служебными файлами Subversion.</p>
<p><strong>Примечание</strong>. Вы можете создать сколько угодно рабочих копий, это никак не повлияет на хранилище.</p>
<p><strong>Добавляем файл в проект</strong></p>
<p>Допустим, мы создали (в папке с рабочей копией) файл index.php и хотим добавить его в хранилище. Для этого выполняем команды:<br />
<code>svn add index.php<br />
svn commit index.php -m "добавлен новый файл index.php"</code><br />
<span id="more-203"></span><br />
<strong>Примечание</strong>. Если вы используете программы вроде TortoiseSVN, ищите в их меню команды <code>Add</code> и <code>Commit</code>. Обычно после выполнения <code>Add</code> на иконке файла появляется значок &#034;+&#034;, а после выполнения <code>Commit</code> – галочка зеленого цвета (или что-то в этом духе). При этом открывается текстовый редактор для ввода комментария.</p>
<p>Еще одно <strong>примечание</strong>. Subversion не заставляет вас писать комментарии. Но если они хорошо составлены, то вы сможете легко ориентироваться в версиях ваших файлов. Поэтому не советую писать фразы вроде &#034;Мелкие исправления&#034; и т.п.</p>
<p>Предположим, вы написали в этом файле какой-то код, и хотите <strong>сохранить</strong> его в хранилище. Просто выполните команду:<br />
<code>svn commit index.php -m "написан заголовок страницы"</code></p>
<p>Subversion присваивает версиям файлов номера после каждого обновления хранилища. Используя эти номера можно <strong>возвращаться</strong> к любому сохраненному состоянию файлов или просматривать различия между ними.</p>
<p>Для <strong>обновления файлов</strong> используется команда:<br />
<code>svn update index.php</code> – обновляет до последней версии в хранилище (т.н. HEAD версия)<br />
Можно задать номер версии <strong>явно</strong>:<br />
<code>svn update index.php –r 1</code><br />
Эта команда позволяет вернуться к любой предыдущей версии файла (т.н. &#034;машина времени&#034;).</p>
<p>Как видите, ничего сложного. Вы можете возвращаться к любой версии файла и при этом не рискуете потерять информацию.</p>
<p><strong>Примечание</strong>. Если вы работаете сами, то, скорее всего, использовать команду <code>update</code> будете довольно редко. Но если в разработке участвует несколько человек, то вам придется постоянно использовать эту команду для всего проекта, чтобы получить изменения, сделанные вашими коллегами.</p>
<p><strong>Создание новой ветки</strong></p>
<p>Допустим, вы завершили создание сайта и разместили его в интернете. Вам нужно выполнять его поддержку, но в тоже время вы хотите добавить несколько новых функций.</p>
<p>Естественно вы можете добавить эти функции в основную ветку (<code>trunk</code>), а при необходимости возвращаться к нужной версии проекта. Но представьте, что вы захотели сделать мелкие изменения на сайте. Если вы внесете эти изменения в хранилище, то они будут иметь более поздний номер версии, чем экспериментальные изменения.</p>
<p>Именно для таких ситуаций предусмотрена возможность создания дополнительных веток.<br />
По-сути, создание новой ветки – это просто <strong>копирование</strong> существующей в новую папку (имеется в виду папка в хранилище, а не рабочей копии).<br />
Сделать это не сложно:<br />
<code>svn copy file:///e:/docs/svn/my_project/trunk<br />
file:///e:/docs/svn/my_project/brunches/experimental<br />
-m “Экспериментальная ветка”</code><br />
Эта команда создает внутри папки <code>brunches</code> папку <code>experimental</code> и копирует в нее все содержимое <code>trunk</code>.</p>
<p><strong>Примечание</strong>. На самом деле файлы не копируются. Subversion сохраняет только исходное состояние файла и внесенные изменения. Таким образом, можно не беспокоиться, что хранилище станет слишком большим.</p>
<p>Теперь мы можем создать <strong>рабочую копию</strong> новой ветки<br />
<code>svn checkout file:///e:/docs/svn/my_project/brunches/experimental</code><br />
спокойно вносить в нее изменения и сохранять их в хранилище.</p>
<p>Если вам понадобится <strong>вернуться к основной ветке</strong> проекта, выполните команду<br />
<code>svn switch file:///e:/docs/svn/my_project/trunk</code></p>
<p><strong>Заключение</strong></p>
<p>В этой статье описаны далеко не все возможности систем управления версиями. Для этого нужна целая книга (которая, кстати, входит в дистрибутив). Я просто хотел рассказать об основных возможностях этой системы.</p>
<p>Самое главное. Все данные находятся в хранилище. Поэтому регулярное создание его <strong>резервных копий</strong> не роскошь, а жизненная необходимость.</p>
<p>Если у вас возникли вопросы, замечания или вы хотите поделиться своим опытом работы с такими системами. Не стесняйтесь, комментарии открыты <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  .</p>
<p><strong>Интересно почитать</strong></p>
<p>Мы можем установить <a href='http://www.galion.ru'>алюминиевые окна, витрины</a>, а также выполнить другие виды работ.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/upravlenie-proectami-subversion-rabochie-kopii.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Web разработка. Эффективное управление проектами (Subversion)</title>
		<link>http://www.simplecoding.org/upravlenie-proectami-subversion.html</link>
		<comments>http://www.simplecoding.org/upravlenie-proectami-subversion.html#comments</comments>
		<pubDate>Sun, 13 Jan 2008 08:00:20 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/upravlenie-proectami-subversion.html</guid>
		<description><![CDATA[Существует мнение, что системы управления версиями предназначены исключительно для команд профессиональных программистов и бесполезны при самостоятельной разработке. В этой статье я постараюсь объяснить, почему это не так. Но, прежде всего несколько слов о самих системах управления версиями. Это программное обеспечение предназначено для облегчения работы с постоянно изменяющимися файлами. Оно обеспечивает возможность сохранения промежуточных состояний файлов, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.simplecoding.org/wp-content/uploads/2008/01/subversion_logo.png" alt="Картинка для subversion" style="float: left" /><br />
Существует мнение, что системы управления версиями предназначены исключительно для команд профессиональных программистов и бесполезны при самостоятельной разработке. В этой статье я постараюсь объяснить, почему это не так.</p>
<p>Но, прежде всего несколько слов о самих системах управления версиями. Это программное обеспечение предназначено для облегчения работы с <strong>постоянно изменяющимися файлами</strong>. Оно обеспечивает возможность сохранения промежуточных состояний файлов, создания нескольких версий одного файла (или их набора), позволяет переносить изменения между различными версиями файлов, просматривать внесенные изменения и многое другое.</p>
<p>Самое главное достоинство таких систем состоит в том, что из них <strong>не может</strong> исчезнуть информация. Т.е. всегда можно вернуться к однажды сохраненной версии файла, независимо от того, какие изменения были в него внесены.</p>
<p>Рассмотрим <strong>простой пример</strong>. Допустим, вы делаете web страницу. Проект состоит из трех файлов (с разметкой, таблицей стилей и скриптами). На каком-то этапе вы получили приемлемый внешний вид, но решили немного поэкспериментировать. Естественно эти эксперименты затронут все три файла, причем изменения будут внесены в различные их части.</p>
<p>Чтобы сохранить текущую версию проекта, вы делаете копию его файлов и экспериментируете уже с ними. Через некоторое время у вас накапливается десяток таких копий. И тут&#8230; вы находите ошибку в скриптах. Естественно, исправить ее нужно во всех копиях. И начинается карусель: &#034;открыть&#034; &#8211; &#034;найти&#034; &#8211; &#034;вставить&#034; &#8211; &#034;сохранить&#034; &#8211; &#034;закрыть&#034; &#8211; &#034;перейти в следующую папку&#034; &#8211; &#034;повтор&#034;.<br />
<span id="more-201"></span><br />
Если вы работаете в команде (даже из двух человек), то количество таких ситуаций растет как снежный ком. Потому что сюда добавляются исправления, сделанные вашим напарником.</p>
<p>Именно для таких ситуаций и разработаны системы управления версиями. Принцип их работы довольно простой. Для хранения информации создается специальное <strong>хранилище</strong> (что-то вроде базы данных), в котором сохраняются все внесенные в файлы изменения. Естественно, сохранение происходит исключительно по вашему желанию, и возвращаться вы сможете только к сохраненным состояниям.</p>
<p>Если вы работаете в команде, и несколько человек попытаются сохранить один и тот же файл, но с различными изменениями, система выдаст сообщение о возникновении <strong>коллизии</strong>. В этом случае разработчики договариваются между собой, какие изменения оставить и вносят их в хранилище.</p>
<p>Но эта статья об использовании систем управления версий при индивидуальной разработке, поэтому проблемы команд мы здесь рассматривать не будем.</p>
<p>Думаю, теории достаточно, переходим к реализации.</p>
<p><strong>Выбор системы контроля версий</strong></p>
<p>На сегодняшний день существует множество таких систем как платных, так и бесплатных с открытым исходным кодом. Из бесплатных, наибольшее распространение получили <a href="http://www.nongnu.org/cvs/">CVS</a> и <a href="http://subversion.tigris.org/">Subversion</a>. Последняя появилась значительно позже и изначально позиционировалась как замена CVS. В Subversion реализован ряд возможностей, отсутствующих в CVS, что делает ее более привлекательной для новых проектов.</p>
<p><strong>Установка и настройка</strong> Subversion</p>
<p>Здесь все предельно просто. Качаете с <a href="http://subversion.tigris.org/">официального сайта</a> дистрибутив и запускаете инсталлятор.</p>
<p>После установки вы сможете работать&#8230; но только через консоль. Естественно, это позволяет детально изучить работу системы, но вводить каждый раз имена файлов&#8230; мягко говоря, не очень удобно <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  .</p>
<p>Поэтому советую сразу скачать какой-нибудь графический клиент для Subversion. Полный их список находится <a href="http://subversion.tigris.org/links.html">здесь</a>.</p>
<p>Я пользовался двумя:<br />
1) <a href="http://subclipse.tigris.org/">Subclipse</a> – это плагин для Eclipse(http://www.eclipse.org/), т.е. для его использования нужна эта IDE.<br />
2) <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a> – это более универсальная оболочка. Она встраивается в &#034;Проводник&#034; Windows. При этом к иконкам файлов добавляются значки, отображающие текущее состояние файла, а команды можно выполнять из контекстного меню.</p>
<p>Теперь нужно <strong>создать хранилище</strong></p>
<p>Для этого создаем новую папку, например, <code>e:\docs\svn</code>.<br />
И, находясь в этой папке, выполняем команду:<br />
<code>svnadmin create my_project</code><br />
Эта операция создаст папку &#034;<code>e:\docs\svn\my_project</code>&#034; со служебными файлами хранилища.</p>
<p><strong>Примечание</strong>. Если вы используете какой-нибудь клиент, ищите пункт Create Repository.</p>
<p>Перед отправкой файлов в хранилище очень желательно определиться со <strong>структурой проекта</strong></p>
<p>Это, наверное, самый сложный этап для новичков (по себе знаю <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>Чтобы не морочить вам голову теорией приведу пару примеров, которые должны подойти для небольших проектов.</p>
<p><strong>Первый пример</strong>. Используем две папки:<br />
<code>trunk/</code> – для размещения законченной (стабильной) версии (ветки) проекта;<br />
<code>branches/</code> – эта папка будут использоваться для экспериментов, т.е. в ней вы будете создавать папки с экспериментальными версиями проекта. Если вы решите, что какая-нибудь из этих версий должна заменить основную, то просто перенесете ее в <code>trunk</code>.</p>
<p><strong>Второй пример</strong> удобно использовать, если нужны две версии проекта, различающиеся только несколькими файлами. Например, вы создаете web сайт, использующий базу данных. Параметры подключения к этой базе на вашем компьютере и на сервере будут отличаться, но не изменять же их каждый раз вручную.<br />
Тут удобно использовать три папки:<br />
<code>trunk/</code><br />
<code>branches/</code><br />
<code>trunk_for_server/</code> &#8211; копия папки <code>trunk</code> для сервера (отличаются только файлы с параметрами подключения).<br />
Перед закачкой файлов на сервер вы просто &#034;сливаете&#034; нужные изменения из <code>trunk</code> в <code>trunk_for_server</code>.</p>
<p><strong>Примечание</strong>. Оба приведенных примера это только возможные варианты. Вы можете придумать свою структуру.</p>
<p>Переходим к <strong>созданию выбранной структуры в хранилище</strong></p>
<p>Для этого создаем временную папку, например, <code>e:\temp</code>, а в ней пустые папки, соответствующие выбранной структуре.<br />
Например, если вы остановились на первом варианте:</p>
<pre>e:\temp\trunk
	\branches</pre>
<p>Теперь, находясь в папке &#034;<code>e:</code>&#034;, выполняем импорт этих папок в хранилище.<br />
<code>svn import temp file:///e:/docs/svn/my_project -m "Начальный импорт"</code></p>
<p>Удаляем <code>e:\temp</code>.</p>
<p>В следующей статье я покажу несколько приемов работы с созданным проектом.</p>
<p><strong>Интересное</strong></p>
<p><a href='http://kupilift.ru'>Панорамные лифты otis</a> удобное средство передвижения и украшение современного здания.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/upravlenie-proectami-subversion.html/feed</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
	</channel>
</rss>

