Как создать SVN репозиторий через SSH

Как создать репозиторий SVN ?


Для начала выберем, где у нас будет лежать репозиторий.
У меня на это дело есть папка ~/repos. Вы можете последовать моему примеру или сделать так же. Во втором случае, вы можете создать её (ну, и зайти в неё заодно):


123
cd ~
mkdir repos
cd repos


Допустим, я хочу создать репозиторий с названием foo. Создаётся одной командой:

1
svnadmin create foo


Где foo — путь к папке, где будет лежать репозиторий. Вы можете указывать и абсолютный путь. А так как я указал относительный, находясь в папке ~/repos, он будет лежать в ~/repos/foo. Давайте зайдём внутрь:


12
cd foo
ls


Что же мы увидим?
1
conf  db  format  hooks  locks  README.txt


Тут нас интересует в первую очередь папка conf и во вторую — hooks. Давайте по порядку, начинаем с conf:
12
cd conf
ls


Что внутри?


1
authz  passwd  svnserve.conf


Тут нас интересуют два файла: passwd — в нём будут храниться наши логины-пароли и svnserve.conf, в котором лежат основные настройки. Разберёмся сначала с первым. Открываем его


На заметку

Я буду открывать и редактировать текстовые файлы при помощи vim, но если вы предпочитаете другой текстовый редактор, можете пользоваться им. Если же вы новичок и не знаете, что вы предпочитаете и вообще не умеете пользоваться консольными текстовыми редакторами, можете почитать мой краткий ликбез по основам работы с vim и повторять за мной)



1
vim passwd


Внутри мы видим девственно чистую заготовку:


123456789
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.


[users]
# harry = harryssecret
# sally = sallyssecret




Собственно, в комментарии вначале всё и рассказано. На каждой новой строке пишем логин, а через знак “равно” — пароль. Да, они хранятся незашифрованными. Не вписывайте сюда свой единственный и любимый пароль одновременно от интернет-банка, страницы вконтакте и голд-аккаунта на порнхабе, может, вам будет спокойнее. Допишем в конец строчку:
1
foo = bar
Это будет означать, что с логином foo можно будет зайти по паролю bar. И сохраняем файл. Переходим к следующему экспонату:
1
vim svnserve.conf


Тут уже всё сделано до нас, только закомменчено. Находим следующую строку и раскомменчиваем её (т.е. удаляем знак “#” из начала строки)
1
auth-access = write
Это будет означать, что авторизовавшийся юзер сможет как скачивать реп, так и коммиттить в него свои изменения. Строчка выше, anon-access, выставляет то же самое, но без логина. Я не включатю даже чтение для анонимного доступа. Хотя можете включить и его, если того требуют ваши задачи.


Далее раскомменчиваем строчку
1
password-db = passwd
Это указывает, что логины-пароли надо искать в файле, который мы только что меняли. Как вы понимаете, можно указать и другой путь, но я оставляю обычно так.


Всё, сохраняем файл, больше менять ничего для начала не нужно.


Теперь идём смотреть, что в папке hooks:
12
cd ../hooks
ls


В этой папке есть целое море заготовок различных хуков всех сортов и расцветок. Наибольший интерес представляет post-commit хук. Этот хук вызывается после того, как кто-то совершает коммит в репу. Как это может пригодиться на практике? Вот простой пример: в репозитории находятся файлы сайта. Сайт хостится на этом же серваке (а в папке, где он хостится, находится рабочая копия). Соответственно, если в пост-коммит хук прописать апдейт этой рабочей копии, то сайт будет обновляться автоматически после каждого коммита в реп. Это чертовски удобно и, в отличие от FTP, никто не затрёт ничьи изменения. Также, если сайт лежит на другом хостинге, можно наладить и пересылку обновлённых файлов по FTP (что уже сложнее, но всё равно реально провернуть). В-общем, применить есть куда.


На заметку

Тут я привожу пример того, как я использую пост-коммит хук. Повторять за мной это действие не надо, оно только для примера.



Создаю файл
1
vim post-commit
И пишу в нём единственную строчку
1
svn update /home/uvername/servers/mywebsite/httpdocs/


Это у меня по такому пути сайт лежит. И сохраняю файл.
А затем выставляю ему chmod 777, обязательно, чтобы он был исполняемым. Иначе, как говорил Амаяк Акопян, никакого чуда не произойдёт. Если у вас по каким-то причинам не исполняется пост-коммит хук, то в первую очередь проверьте, какой у него chmod:
1
chmod 777 post-commit
Вот, теперь и хук настроен.


Всё, теперь репозиторий работает и вы можете на рабочей машине зачекаутить его с адреса svn://хост/foo, где хост — адрес (IP или доменное имя) машины с репом, а foo — название вашего репа. При коммите спросит логин пароль — они те, что вы вводили в файл passwd.


Надеюсь, и у вас всё получилось!



You can leave a comment with "Facebook":
Не забывайте оставлять комментарии при помощи "ВКонтакте":
Яндекс.Метрика