SVN - SubVersion: различия между версиями

Материал из AlexNook
Перейти к навигацииПерейти к поиску
Строка 1: Строка 1:
[[Изображение:subversion.png|thumb|SubVersion Logo]]
[[Изображение:subversion.png|thumb|SubVersion Logo]]
[http://ru.wikipedia.org/wiki/Subversion '''Subversion'''] -  Sub (под-) + version (версия). В то же время, subversion — свержение. Cвободная централизованная [http://ru.wikipedia.org/wiki/Система_управления_версиями система управления версиями].
[[wikipedia:ru:Subversion|Subversion]] -  Sub (под-) + version (версия). В то же время, subversion — свержение. Cвободная централизованная [[wikipedia:ru:Система_управления_версиями|система управления версиями]].


Subversion разработана специально для замены устаревшей системы [http://ru.wikipedia.org/wiki/CVS CVS], распространённой открытой системы управления версиями. Subversion обладает всеми основными функциями CVS (хотя некоторые из них выполняет другими способами) и свободна от ряда её недостатков.
Subversion разработана специально для замены устаревшей системы [[wikipedia:ru:CVS|CVS]], распространённой открытой системы управления версиями. Subversion обладает всеми основными функциями CVS (хотя некоторые из них выполняет другими способами) и свободна от ряда её недостатков.


==Установка в Gentoo==
==Установка в Gentoo==
Первым делом сверяем USE флаги
Первым делом сверяем USE флаги


'' [ebuild  R  ] dev-util/subversion-1.4.6  USE="'''apache2 berkdb nls python''' -bash-completion -debug -doc -emacs -extras -java -nowebdav -perl -ruby -svnserve -vim-syntax" 0 kB''
{{USEFlag|extended=yes| {{EnableFlag|apache2}}{{EnableFlag|berkdb}}{{EnableFlag|nls}}{{EnableFlag|python}}{{DisableFlag|bash-completion}}{{DisableFlag|debug}}{{DisableFlag|doc}}{{DisableFlag|emacs}}{{DisableFlag|extras}}{{DisableFlag|java}}{{DisableFlag|nowebdav}}{{DisableFlag|perl}}{{DisableFlag|ruby}}{{DisableFlag|svnserve}}{{DisableFlag|vim-syntax}}}}


, а потом как всегда выполняем:
, а потом как всегда выполняем:


emerge  subversion. Таким образом СВН ставится в виде модуля апача.
{{Root|emerge  subversion}}
 
Таким образом СВН ставится в виде модуля апача.


Затем делаем автоконфигурацию СВН
Затем делаем автоконфигурацию СВН


emerge --config
{{Root|emerge --config}}


==Конфигурирование==
==Конфигурирование==
Далее в файле конфигурации апача '''/etc/conf.d/apache2''' надо чтобы было прописано
Далее в файле конфигурации апача {{Path|/etc/conf.d/apache2}} надо чтобы было прописано
 
{{File|/etc/conf.d/apache2|<pre>APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D SVN -D SVN_AUTHZ -D DAV -D DAV_FS"</pre>}}
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D SVN -D SVN_AUTHZ -D DAV -D DAV_FS"
Другие опции добавились после установки '''php'''. Так что это всего лишь ориентир на то, что должно быть прописанно в файле.
 
Другие опции добавились после установки php. Так что это всего лишь ориентир на то, что должно быть прописанно в файле.


===Настройка доступа к SVN по SSL===
===Настройка доступа к SVN по SSL===
Для возможности использования СВН только по протоколу '''https''' необходимо сделать следующее:
Для возможности использования СВН только по протоколу {{Keyword|https}} необходимо сделать следующее:


Переименовать файл '''47_mod_dav_svn.conf''' в '''47_mod_dav_svn.ssl-conf'''.
Переименовать файл {{Path|47_mod_dav_svn.conf}} в {{Path|47_mod_dav_svn.ssl-conf}}}.


Далее в файл '''40_mod_ssl.conf''' добавляем в конец следующее:
Далее в файл {{Path|40_mod_ssl.conf}} добавляем в конец следующее:
{{Code|Строки кода для вставки в файл|<pre>
Include /etc/apache2/modules.d/*.ssl-conf
BrowserMatch "SVN" redirect-carefully
</pre>}}
и получаем вот такое:
{{File|40_mod_ssl.conf|<pre>
## Semaphore:
# Configure the path to the mutual exclusion semaphore the SSL engine uses
# internally for inter-process synchronization.
SSLMutex  file:/var/run/ssl_mutex
</IfModule>
Include /etc/apache2/modules.d/*.ssl-conf
BrowserMatch "SVN" redirect-carefully
</IfDefine>
# vim: ts=4 filetype=apache
</pre>}}


<div style="background-color:  #FFEEFE; border: 1px dashed black; padding:5px">
<p>## Semaphore:</p>
<p># Configure the path to the mutual exclusion semaphore the SSL engine uses</p>
<p># internally for inter-process synchronization.</p>
<p>SSLMutex  file:/var/run/ssl_mutex</p>
<p></IfModule></p>
<p>'''Include /etc/apache2/modules.d/*.ssl-conf</p>
<p>BrowserMatch "SVN" redirect-carefully'''</p>
<p></IfDefine></p>
<p># vim: ts=4 filetype=apache</p>
</div>


Первая строка добавляет возможность при использовании SSl подгружать файл с конфигурациями СВН (мы его переименовали в ''47_mod_dav_svn.ssl-conf''). А вторая строка нужная т.к. мы ужесточаем авторизацию ТОЛЬКО по SSL.
Первая строка добавляет возможность при использовании SSl подгружать файл с конфигурациями СВН (мы его переименовали в {{Path|47_mod_dav_svn.ssl-conf}}). А вторая строка нужная т.к. мы ужесточаем авторизацию ТОЛЬКО по SSL.


==Создание репозитария==
==Создание репозитария==
Для создания репозитария выполняем:
Для создания репозитария выполняем:
Поправить  '''/etc/apache2/modules.d/47_mod_dav_svn.ssl-conf''' (переименованный нами ранее файл), а именно добавить в него вот такой кусочек кода (по аналогии)
Поправить  {{Path|/etc/apache2/modules.d/47_mod_dav_svn.ssl-conf}} (переименованный нами ранее файл), а именно добавить в него вот такой кусочек кода (по аналогии)
 
{{File|/etc/apache2/modules.d/47_mod_dav_svn.ssl-conf|<pre>
         <Location /svn/16cla>
         <Location /svn/16cla>
                 DAV svn
                 DAV svn
Строка 59: Строка 64:
               #</LimitExcept>
               #</LimitExcept>
                 SSLRequireSSL
                 SSLRequireSSL
         </Location>
         </Location></pre>}}


Где закомментированные строки разрешают читать СВН анонимам, но писать туда можно только после прохождения авторизации по SSL, а '''16CLA''' - это пример названия репозитария.
Где закомментированные строки разрешают читать СВН анонимам, но писать туда можно только после прохождения авторизации по SSL, а '''16CLA''' - это пример названия репозитария.


Далее командой '''svnadmin create /var/svn/16cla''' создаём новый репозитарий  (он создаёт следующие пути и файлы:
Далее командой  
 
{{Root|svnadmin create /var/svn/16cla}} создаём новый репозитарий  (он создаёт следующие пути и файлы:
conf/  dav/  db/  format  hooks/  locks/  README.txt
{{Codeline|conf/  dav/  db/  format  hooks/  locks/  README.txt}}


# Потом создаём файл  '''/var/svn/srach/conf/svnpasswd''' с содержимыми паролей и логинов (sha!)
# Потом создаём файл  {{Path|/var/svn/srach/conf/svnpasswd}} с содержимыми паролей и логинов ('''sha''')
:: Можно воспользоваться ссылкой ''http://www.askapache.com/online-tools/htpasswd-generator/''  или утилитой htpasswd.exe (не уверен что правда она ша держит) – как пример строка из этого файла ''alex:{SHA}YMbSd6i9gd5/3eGSAb+cWKPfCPQ=''
:: Можно воспользоваться [http://www.askapache.com/online-tools/htpasswd-generator/ ''ссылкой''] или утилитой '''htpasswd.exe''' (не уверен что правда она ша держит) – как пример строка из этого файла {{Codeline|<nowiki>alex:{SHA}YMbSd6i9gd5/3eGSAb+cWKPfCPQ=</nowiki>}}
# Даём права на запись апачу '''chown -R apache:apache /var/svn/16cla/'''
# Даём права на запись апачу {{Root|chown -R apache:apache /var/svn/16cla/}}
# Далее рестартим апач
# Далее рестартим апач
# Конектиться к репозитарию можно по адресу http://host.domain:port/svn/repos
# Конектиться к репозитарию можно по адресу {{Codeline|<nowiki>http://host.domain:port/svn/repos</nowiki>}}
Как пример '''https://srach.no-ip.org/svn/16cla/'''
Как пример {{Codeline|<nowiki>https://srach.no-ip.org/svn/16cla/</nowiki>}}


==Линковка репозитария и веб директории==
==Линковка репозитария и веб директории==
При разработке веб приложений иногда полезно синхронизировать сожержимое репозитария и веб директории. Для этого выполняем:
При разработке веб приложений иногда полезно синхронизировать сожержимое репозитария и веб директории. Для этого выполняем:


Создаём скрипт в файл '''/var/svn/srach/hooks/post-commit'''. И добавляем в него следующее:
Создаём скрипт в файл {{Path|/var/svn/srach/hooks/post-commit}}. И добавляем в него следующее:


nano -w /var/svn/srach/hooks/post-commit
{{Root|nano -w /var/svn/srach/hooks/post-commit}}


<pre>
{{File|/var/svn/srach/hooks/post-commit|<pre>
#!/bin/sh
#!/bin/sh


svn --username user --password parol --force export http://16cla.no-ip.org/svn/16cla/ /var/www/16cla/htdocs/" > post-commit
svn --username user --password parol --force export http://16cla.no-ip.org/svn/16cla/ /var/www/16cla/htdocs/" > post-commit
</pre>
</pre>}}


Пример приведён для репозитария '''16cla''' и одноимённой веб директории.
Пример приведён для репозитария '''16cla''' и одноимённой веб директории.
Строка 91: Строка 96:
Далее даём права на этот файл на выполнение  
Далее даём права на этот файл на выполнение  


chmod 755 post-commit
{{Root|chmod 755 post-commit}}


==Рестарт Apache2==
==Рестарт Apache2==
Т.к. SVN стоит в виде модуля апача, то для вступления в силу каких-либо изменений необходимо рестартить апач.
Т.к. SVN стоит в виде модуля апача, то для вступления в силу каких-либо изменений необходимо рестартить апач.


/etc/init.d/apache2 restart
{{Root|/etc/init.d/apache2 restart}}


==Ссылки==
==Ссылки==

Версия 21:20, 9 декабря 2008

SubVersion Logo

Subversion - Sub (под-) + version (версия). В то же время, subversion — свержение. Cвободная централизованная система управления версиями.

Subversion разработана специально для замены устаревшей системы CVS, распространённой открытой системы управления версиями. Subversion обладает всеми основными функциями CVS (хотя некоторые из них выполняет другими способами) и свободна от ряда её недостатков.

Установка в Gentoo

Первым делом сверяем USE флаги

Use Flags: apache2berkdbnlspython-bash-completion-debug-doc-emacs-extras-java-nowebdav-perl-ruby-svnserve-vim-syntax (?)

, а потом как всегда выполняем:

emerge subversion

Таким образом СВН ставится в виде модуля апача.

Затем делаем автоконфигурацию СВН

emerge --config

Конфигурирование

Далее в файле конфигурации апача /etc/conf.d/apache2 надо чтобы было прописано

File: /etc/conf.d/apache2
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D SVN -D SVN_AUTHZ -D DAV -D DAV_FS"

Другие опции добавились после установки php. Так что это всего лишь ориентир на то, что должно быть прописанно в файле.

Настройка доступа к SVN по SSL

Для возможности использования СВН только по протоколу https необходимо сделать следующее:

Переименовать файл 47_mod_dav_svn.conf в 47_mod_dav_svn.ssl-conf}.

Далее в файл 40_mod_ssl.conf добавляем в конец следующее:

Code: Строки кода для вставки в файл
Include /etc/apache2/modules.d/*.ssl-conf 
BrowserMatch "SVN" redirect-carefully

и получаем вот такое:

File: 40_mod_ssl.conf
## Semaphore:
# Configure the path to the mutual exclusion semaphore the SSL engine uses
# internally for inter-process synchronization.
SSLMutex  file:/var/run/ssl_mutex
</IfModule>
Include /etc/apache2/modules.d/*.ssl-conf 
BrowserMatch "SVN" redirect-carefully
</IfDefine>
# vim: ts=4 filetype=apache


Первая строка добавляет возможность при использовании SSl подгружать файл с конфигурациями СВН (мы его переименовали в 47_mod_dav_svn.ssl-conf). А вторая строка нужная т.к. мы ужесточаем авторизацию ТОЛЬКО по SSL.

Создание репозитария

Для создания репозитария выполняем: Поправить /etc/apache2/modules.d/47_mod_dav_svn.ssl-conf (переименованный нами ранее файл), а именно добавить в него вот такой кусочек кода (по аналогии)

File: /etc/apache2/modules.d/47_mod_dav_svn.ssl-conf
        <Location /svn/16cla>
                DAV svn
                SVNPath /var/svn/16cla
                AuthType Basic
                AuthName "16CLA repository"
                AuthUserFile /var/svn/16cla/conf/svnpasswd
               #<LimitExcept GET PROPFIND OPTIONS REPORT>
                Require valid-user
               #</LimitExcept>
                SSLRequireSSL
        </Location>

Где закомментированные строки разрешают читать СВН анонимам, но писать туда можно только после прохождения авторизации по SSL, а 16CLA - это пример названия репозитария.

Далее командой

svnadmin create /var/svn/16cla

создаём новый репозитарий (он создаёт следующие пути и файлы:

conf/ dav/ db/ format hooks/ locks/ README.txt

  1. Потом создаём файл /var/svn/srach/conf/svnpasswd с содержимыми паролей и логинов (sha)
Можно воспользоваться ссылкой или утилитой htpasswd.exe (не уверен что правда она ша держит) – как пример строка из этого файла alex:{SHA}YMbSd6i9gd5/3eGSAb+cWKPfCPQ=
  1. Даём права на запись апачу
    chown -R apache:apache /var/svn/16cla/
  2. Далее рестартим апач
  3. Конектиться к репозитарию можно по адресу http://host.domain:port/svn/repos

Как пример https://srach.no-ip.org/svn/16cla/

Линковка репозитария и веб директории

При разработке веб приложений иногда полезно синхронизировать сожержимое репозитария и веб директории. Для этого выполняем:

Создаём скрипт в файл /var/svn/srach/hooks/post-commit. И добавляем в него следующее:

nano -w /var/svn/srach/hooks/post-commit
File: /var/svn/srach/hooks/post-commit
#!/bin/sh

svn --username user --password parol --force export http://16cla.no-ip.org/svn/16cla/ /var/www/16cla/htdocs/" > post-commit

Пример приведён для репозитария 16cla и одноимённой веб директории.

Далее даём права на этот файл на выполнение

chmod 755 post-commit

Рестарт Apache2

Т.к. SVN стоит в виде модуля апача, то для вступления в силу каких-либо изменений необходимо рестартить апач.

/etc/init.d/apache2 restart

Ссылки

  1. Официальный сайт Subversion
  2. The Risks of Distributed Version Control Бен Коллинз-Сассман
  3. более подробно об SVN читаем вот тут
  4. HOWTO_Apache2_with_subversion_SVN_and_DAV
  5. HTTP-based_server_using_Apache2