<?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>Блог Гилыча</title>
	<atom:link href="http://gillbeits.ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://gillbeits.ru</link>
	<description>Блог Гилыча. Все о программировании в WEB, и многом другом.</description>
	<lastBuildDate>Thu, 19 Apr 2012 05:55:03 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Заметки по пользованию Git&#8217;ом</title>
		<link>http://gillbeits.ru/2012/04/19/147/</link>
		<comments>http://gillbeits.ru/2012/04/19/147/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 05:39:33 +0000</pubDate>
		<dc:creator>Гилыч</dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=147</guid>
		<description><![CDATA[В общем решил я написать заметочку, по пользованию Git'ом, о моментах, которые случались в практике. По мере появления интересных ситуаций или нужных настроек, буду дописывать заметку. Замечу, что многие настройки зависят от ОС, в данном случае nix система. Настройки: git config --global core.autocrlf false git config --global core.whitespace fix git config --global color.ui true git [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2012%2F04%2F19%2F147%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2012%2F04%2F19%2F147%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>В общем решил я написать заметочку, по пользованию Git'ом, о моментах, которые случались в практике. По мере появления интересных ситуаций или нужных настроек, буду дописывать заметку. Замечу, что многие настройки зависят от ОС, в данном случае nix система.</p>
<p>Настройки:</p>
<ul>
<li>git config --global core.autocrlf false</li>
<li>git config --global core.whitespace fix</li>
<li>git config --global color.ui true</li>
<li>git config --global color.status true</li>
<li>git config --global alias.st status</li>
<li>git config --global alias.ci commit</li>
<li>git config --global alias.br branch</li>
<li>git config --global alias.co checkout</li>
<li>git config --global alias.unstage 'reset HEAD --'</li>
<li>ну и конечно же user.name и user.email</li>
</ul>
<p>Команды:</p>
<ul>
<li>git init - проинициализировать локальный репозитарий</li>
<li>git remote add origin git@server:repository - добавить ссылку на сервер с удаленным репозитарием</li>
<li>git remote update - обновить информацию о  ветвях удаленного репозитария</li>
<li>git checkout -b &lt;newbranch&gt; - создать копию текущей ветки с новым именем и переключиться в нее</li>
<li>git checkout &lt;branchname&gt; - переключиться в ветку</li>
<li>git pull origin &lt;branchname&gt; - загрузить обновленные данные ветки из удаленного репозитария</li>
<li>git add -i - вход в интерактивный режим добавления патчей/файлов в новый коммит</li>
<li>git  commit -m 'comment' - сделать коммит в локальный репозитарий с комментарием</li>
<li>git push origin &lt;branchname&gt; - выгрузить данные из локального репозитария данной ветки в удаленный репозитарий</li>
<li>git merge --no-ff &lt;branchname&gt; - слить в текущую ветку изменения ветки branchname ( флаг --no-ff обязателен для сохранения истории коммитов вливаемой ветки )</li>
<li>git reset --hard HEAD^ - откат до предыдущего коммита ветки</li>
<li>git checkout HEAD -- &lt;path&gt; - восстановить файл HEAD ревизии</li>
</ul>
<p>Pro Git - <a href="http://progit.org/book/ru/">http://progit.org/book/ru/</a></p>
<p>Использование Git - <a href="http://jenyay.net/Programming/Git">http://jenyay.net/Programming/Git</a></p>
<p>Руководство пользователя GIT - <a href="http://freesource.info/wiki/RuslanHihin/gitusermanual?v=b7s&amp;">http://freesource.info/wiki/RuslanHihin/gitusermanual?v=b7s&amp;</a></p>
<p>Удачная модель ветвления для Git - <a href="http://habrahabr.ru/post/106912/">http://habrahabr.ru/post/106912/</a></p>
<p>Особенности настройки git под windows - <a href="http://habrahabr.ru/post/74839/">http://habrahabr.ru/post/74839/</a></p>
<p>Git — наглядная справка - <a href="http://sytchev.ru/git-visual-reference/">http://sytchev.ru/git-visual-reference/</a></p>
<p>Магия Git - <a href="http://dl.dropbox.com/u/281916/delete/book.pdf">http://dl.dropbox.com/u/281916/delete/book.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2012/04/19/147/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Переквалификация</title>
		<link>http://gillbeits.ru/2011/08/05/134/</link>
		<comments>http://gillbeits.ru/2011/08/05/134/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 11:30:56 +0000</pubDate>
		<dc:creator>Гилыч</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[Обо всем]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=134</guid>
		<description><![CDATA[Привет. Собственно о чем я?! На досуге сел и думаю: "PHP программистом уже быть не модно, как то уже не то....". И решил я переквалифицироваться. Чем себя занять, какой язык мучить? На самом деле это "на досуге" было давно. Так вот, в ближайшее время начнут выходить статьи по новым темам: nodeJs, Асинхронное программирование, программирование под мобильные [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2011%2F08%2F05%2F134%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2011%2F08%2F05%2F134%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Привет.</p>
<p>Собственно о чем я?!</p>
<p>На досуге сел и думаю: "PHP программистом уже быть не модно, как то уже не то....". И решил я переквалифицироваться. Чем себя занять, какой язык мучить?</p>
<p>На самом деле это "на досуге" было давно. <img src='http://gillbeits.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Так вот, в ближайшее время начнут выходить статьи по новым темам: nodeJs, Асинхронное программирование, программирование под мобильные платформы (Android, iOS) с использованием различных мультиплатформенных Framework'ов.<br />
Надеюсь вам понравится.</p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2011/08/05/134/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Мульти HTTP-запрос на CURL</title>
		<link>http://gillbeits.ru/2010/11/17/89/</link>
		<comments>http://gillbeits.ru/2010/11/17/89/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 07:46:58 +0000</pubDate>
		<dc:creator>Drakosha</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP-WEB]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[multicurl]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=89</guid>
		<description><![CDATA[Иногда возникает необходимость во время исполнения скрипта сделать несколько http запросов. При большом их количестве возникает проблема со временем обработки скрипта т.к. все запросы делаются по очереди и общее время их выполнения будет равно сумме времен потраченных на каждый запрос в отдельности. Хорошо если запросов 5, а если их 100? Сами представляете сколько будет выполняться [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F11%2F17%2F89%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F11%2F17%2F89%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Иногда возникает необходимость во время исполнения скрипта сделать  несколько http запросов. При большом их количестве возникает проблема со  временем обработки скрипта т.к. все запросы делаются по очереди и общее  время их выполнения будет равно сумме времен потраченных на каждый  запрос в отдельности. Хорошо если запросов 5, а если их 100? Сами  представляете сколько будет выполняться скрипт. Но выход есть!<br />
<span id="more-89"></span><br />
Мы будем использовать библиотеку CURL, у которой есть возможность создавать мульти запросы.<br />
Что нам это дает? Общее время выполнения всех запросов будет равно  времени выполнения самого долгого запроса. Согласитесь это очень круто!</p>
<p>Вот собственно функция которая все это сделает:</p>
<pre class="brush: php; title: ; notranslate">
/**
* Функция мульти запроса на CURL
* @param array $data Данные для запроса
* @param array $options Опции для всех запросов
* @param array $oneoptions Опции для отдельных запросов
* @return array
*/
function multiRequest($data, $options = array(), $oneoptions = array()) {
// Массив для ресурсов соединения
$curls = array();
// Массив для результатов
$result = array();
// Инициализация мульти запроса
$mh = curl_multi_init();
// Задание параметров запроса
foreach ($data as $id =&gt; $d)
{
$curls[$id] = curl_init();
$url = (is_array($d) &amp;amp;&amp;amp; !empty($d['url'])) ? $d['url'] : $d;
curl_setopt($curls[$id], CURLOPT_URL,            $url);
curl_setopt($curls[$id], CURLOPT_HEADER,         false);
curl_setopt($curls[$id], CURLOPT_RETURNTRANSFER, true);
// Дополнительные опции общие запросов
if (!empty($options))
{
curl_setopt_array($curls[$id], $options);
}
// Дополнительные опции для определенного запроса
if (!empty($oneoptions[$id]))
{
curl_setopt_array($curls[$id], $oneoptions[$id]);
}
// Если post запрос
if (is_array($d))
{
if (!empty($d['post']))
{
curl_setopt($curls[$id], CURLOPT_POST,       1);
curl_setopt($curls[$id], CURLOPT_POSTFIELDS, $d['post']);
}
}
curl_multi_add_handle($mh, $curls[$id]);
}
// Выполняем запрос пока есть соединения
$running = null;
do
{
curl_multi_exec($mh, $running);
}
while($running &amp;gt; 0);
// Получаем данные и закрываем соединения
foreach($curls as $id =&amp;gt; $content)
{
$result[$id] = curl_multi_getcontent($content);
curl_multi_remove_handle($mh, $content);
}
curl_multi_close($mh);
return $result;
}
</pre>
<p><strong>Примеры использования.</strong><br />
<strong>1)</strong> Простой GET запрос с дополнительными параметрами:</p>
<pre class="brush: php; title: ; notranslate">
$data = array(
  'http://webiteam.ru/test/multicurl/test.php?data=This+is+get+first',
  'http://webiteam.ru/test/multicurl/test.php?data=This+is+get+second',
  'http://webiteam.ru/test/multicurl/test.php?data=This+is+get+third',
);
$options = array(
	CURLOPT_REFERER =&gt; 'http://webiteam.ru/',
	CURLOPT_TIMEOUT =&gt; 5
);
$oneoptions[0] = array(CURLOPT_USERAGENT =&gt; 'IE');
$r = multiRequest($data, $options,$oneoptions);
var_dump($r);
</pre>
<p>Результат:</p>
<pre class="brush: php; title: ; notranslate">
array
  0 =&gt; string 'This is get first

http://webiteam.ru/

IE
' (length=41)
  1 =&gt; string 'This is get second

http://webiteam.ru/

' (length=39)
  2 =&gt; string 'This is get third

http://webiteam.ru/

' (length=38)
</pre>
<p>2) POST запрос с дополнительными параметрами:</p>
<pre class="brush: php; title: ; notranslate">
$data = array(array(),array());
$data[0]['url']  = 'http://webiteam.ru/test/multicurl/test.php';
$data[0]['post']['postdata']   = 'This is post first';
$data[1]['url']  = 'http://webiteam.ru/test/multicurl/test.php';
$data[1]['post']['postdata']   = 'This is post second';
$options = array(
	CURLOPT_TIMEOUT =&gt; 10
);
$oneoptions[0] = array(CURLOPT_USERAGENT =&gt; 'Mozilla');
$oneoptions[1] = array(CURLOPT_USERAGENT =&gt; 'Opera');
$r = multiRequest($data, $options, $oneoptions);
var_dump($r);
</pre>
<p>Результат:</p>
<pre class="brush: php; title: ; notranslate">
array
  0 =&gt; string 'This is post first
Mozilla
' (length=27)
  1 =&gt; string 'This is post second
Opera
' (length=26)
</pre>
<p>Как видите ничего сложного!<br />
Список всех дополнительных опций для CURL <a href="http://ru.php.net/manual/en/function.curl-setopt.php" target="_blank">тут</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2010/11/17/89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Многопоточность в PHP 5.3.2</title>
		<link>http://gillbeits.ru/2010/07/21/74/</link>
		<comments>http://gillbeits.ru/2010/07/21/74/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 09:59:27 +0000</pubDate>
		<dc:creator>Гилыч</dc:creator>
				<category><![CDATA[FreeBSD 8]]></category>
		<category><![CDATA[PHP-CLI]]></category>
		<category><![CDATA[fork]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=74</guid>
		<description><![CDATA[Понадобилось в несколько потоков данные обрабатывать. Писать свой класс для работы с системными функциями PHP неохота, тем более, все-таки, не люблю я всякие proc_open, system и т. д. Появилось решение использовать аналог fork от perl, да-да, таковой имеется у PHP в виде библиотеки pcntl. Итак, исходные данные: Сервер - FreeBSD 8; PHP - 5.2.3; Последняя [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F21%2F74%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F21%2F74%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Понадобилось в несколько потоков данные обрабатывать. Писать свой класс для работы с системными функциями PHP неохота, тем более, все-таки, не люблю я всякие proc_open, system и т. д.<br />
<span id="more-74"></span><br />
Появилось решение использовать аналог fork от perl, да-да, таковой имеется у PHP в виде библиотеки pcntl.<br />
Итак, исходные данные:</p>
<ul>
<li>Сервер - FreeBSD 8;</li>
<li>PHP - 5.2.3;</li>
<li>Последняя версия портов;</li>
</ul>
<p>Собираем библиотеку pcntl:</p>
<pre class="brush: bash; title: ; notranslate">
# cd /usr/ports
# make search name=pcntl
# cd /usr/ports/devel/php5-pcntl
# make install
</pre>
<p>А дальше начинается работа с PHP.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// задаем кол-во потоков
$threads = 10;
$i = 0;
$pid_arr = array();
while ($i &lt; intval($threads))
{
	$pid = pcntl_fork(); // вот он, - знакомый до боли fork()
	if ($pid == -1)
	{
		die('could not fork');
	}
	else
		{
		if ($pid) // parent
		{
			$pid_arr[$i] = $pid;
		}
		else // child
		{
			somefunction($i+1); // функция, которая будет основой в дочернем процессе...
			// делаем выход или процессы будут продолжать плодиться
			exit(0);
		}
	}
	$i++;
}
foreach ($pid_arr as $pid)
{
	pcntl_waitpid($pid, $status);
}
function somefunction($i){
	print &quot;fucntion thread - $i\n&quot;;
}
?&gt;
</pre>
<p>Собственно все, - пока работает и нареканий нет...</p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2010/07/21/74/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Переход на php-5.3.2 на FreeBSD 8</title>
		<link>http://gillbeits.ru/2010/07/20/25/</link>
		<comments>http://gillbeits.ru/2010/07/20/25/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 09:22:36 +0000</pubDate>
		<dc:creator>Гилыч</dc:creator>
				<category><![CDATA[FreeBSD 8]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=25</guid>
		<description><![CDATA[Итак, Вы решили перейти все же на php5.3 в среде FreeBSD 8. Сразу скажу, в процессе перехода возникнут подводные камни. Связаны они прежде всего с тем, что в php53 библиотека pcre не является отдельным модулем. Приступим. Обновляем порты на FreeBSD. Процесс долгий, - пьем чай. Теперь нам надо удалить предыдущие модули для php52, и это [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F20%2F25%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F20%2F25%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Итак, Вы решили перейти все же на php5.3 в среде FreeBSD 8.<br />
Сразу скажу, в процессе перехода возникнут подводные камни.<br />
Связаны они прежде всего с тем, что в php53 библиотека pcre не является отдельным модулем.<br />
<span id="more-25"></span><br />
Приступим.<br />
Обновляем порты на FreeBSD.</p>
<pre class="brush: bash; title: ; notranslate">
# cd /usr/ports
# portsnap fetch extract
</pre>
<p>Процесс долгий, - пьем чай.<br />
Теперь нам надо удалить предыдущие модули для php52, и это обязательно!</p>
<pre class="brush: bash; title: ; notranslate">
# pkg_delete php52-*
</pre>
<p>Возможно не все они удалятся, в процессе смотрите, и зачищайте то, что не удалилось автоматом.<br />
Дальше уже проще.</p>
<pre class="brush: bash; title: ; notranslate">
# cd /usr/ports/lang/php5
# make clean install
# cd ../php5-extensions
# make clean install
</pre>
<p>Собственно выбираете нужные Вам модули, ставите и радуетесь убранным функциям =)<br />
Ошибки и правки в комменты....</p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2010/07/20/25/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Установка и настройка subversion на FreeBSD 8</title>
		<link>http://gillbeits.ru/2010/07/15/36/</link>
		<comments>http://gillbeits.ru/2010/07/15/36/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 08:44:53 +0000</pubDate>
		<dc:creator>Гилыч</dc:creator>
				<category><![CDATA[FreeBSD 8]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://gillbeits.ru/?p=36</guid>
		<description><![CDATA[Для начала маленький экскурс, что такое subversion. Subversion - свободная централизованная система управления версиями. Ее часто называют SVN. Пришла она на замену уже устаревшей CVS. Не претендую на первооткрывателя. но все же напишу, как делаю я. Для начала заходим под root'ом: Далее обновляем порты, если долго этого не делали: Идем по пути к subversion и [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F15%2F36%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fgillbeits.ru%2F2010%2F07%2F15%2F36%2F&amp;style=normal&amp;service=bit.ly&amp;service_api=gillbeits%3AR_741e731a2a7b84945714f7032f89059e&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Для начала маленький экскурс, что такое subversion. Subversion - свободная централизованная система управления версиями. Ее часто называют SVN. Пришла она на замену уже устаревшей CVS.</p>
<p><span id="more-36"></span></p>
<p>Не претендую на первооткрывателя. но все же напишу, как делаю я.</p>
<p>Для начала заходим под root'ом:</p>
<pre class="brush: bash; title: ; notranslate"># sudo -s (для меня это выглядит так, Вы можете использовать другой вариант)
# su -</pre>
<p>Далее обновляем порты, если долго этого не делали:</p>
<pre class="brush: bash; title: ; notranslate"># cd /usr/ports
# portsnap fetch extract</pre>
<p>Идем по пути к subversion и устанавливаем:</p>
<pre class="brush: bash; title: ; notranslate"># cd /usr/ports/devel/subversion
# make clean install</pre>
<p>Ждем полной установки и добавляем строки в /etc/rc.conf :</p>
<pre class="brush: bash; title: ; notranslate"># echo 'svnserve_enable=&quot;YES&quot;' &gt;&gt; /etc/rc.conf
# echo 'svnserve_flags=&quot;-d --listen-port=3690&quot;' &gt;&gt; /etc/rc.conf
# echo 'svnserve_data=&quot;/home/svn/repositories&quot;' &gt;&gt; /etc/rc.conf
# echo 'svnserve_user=&quot;svn&quot;' &gt;&gt; /etc/rc.conf
# echo 'svnserve_group=&quot;svn&quot;' &gt;&gt; /etc/rc.conf</pre>
<p>Собственно создаем папку для репозиториев:</p>
<pre class="brush: bash; title: ; notranslate"># mkdir /home/svn/repositories</pre>
<p>Добавляем группу svn и пользователя в эту группу:</p>
<pre class="brush: bash; title: ; notranslate"># pw group add svn
# pw user add svn -g svn -s /sbin/nologin -d /home/svn/repositories/</pre>
<p>Даем права на папку с репозиториями пользователю:</p>
<pre class="brush: bash; title: ; notranslate"># chown -R svn:svn /home/svn/</pre>
<p>Запускаем демона:</p>
<pre class="brush: bash; title: ; notranslate"># /usr/local/etc/rc.d/svnserve start</pre>
<h3>Первая часть закончена, теперь настроим один репозиторий для работы.</h3>
<p>Первым делом создадим его:</p>
<pre class="brush: bash; title: ; notranslate"># svnadmin create /home/svn/repositories/myFirstRepository
# chown -R svn:svn /home/svn/ </pre>
<p>Теперь настраиваем доступ к данному репозиторию, идем по пути /home/svn/repositories/myFirstRepository/conf и правим файл svnserve.conf:</p>
<pre class="brush: bash; title: ; notranslate"># cd /home/svn/repositories/myFirstRepository/conf
# vi svnserve.conf </pre>
<p>Раскомментируем строки:</p>
<pre class="brush: bash; title: ; notranslate">anon-access = none
auth-access = write
password-db = passwd </pre>
<p>Теперь создаем пользователей для доступа к данному репозиторию:</p>
<pre class="brush: bash; title: ; notranslate"># vi passwd</pre>
<p>и добавляем туда пользователя и пароль в формате user = passwd</p>
<p>Делаем рестарт демону:</p>
<pre class="brush: bash; title: ; notranslate"># /usr/local/etc/rc.d/svnserve restart</pre>
<p>Репозиторий готов к работе с клиентом.</p>
<h3>А теперь расскажу Вам, как сделать красивую структуру в репозитории.</h3>
<span class="doc" style="">Директория /trunk содержит основную линию разработки проекта, /branches содержит все ветви, /tags содержит все метки.</span>
<pre class="brush: bash; title: ; notranslate"># cd /home/svn/repositories/
# mkdir svntmp
# cd svntmp
# mkdir trunk branches tags
# cd ..
# svn import svntmp svn://user@localhost/myFirstRepository -m 'struct create' </pre>
<p>После этого мы получим "ровную" структуру для  нашего репозитория.</p>
]]></content:encoded>
			<wfw:commentRss>http://gillbeits.ru/2010/07/15/36/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

