Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh

Автор: manefesto.


Возникла необходимость поставить систему контроля версий, для отслеживания работы программистов.
О преимуществах контроля версий говорить думаю не стоит.
Разобьем на 2 этапа, один настройка серверной части, а второй работа с клиентской

Этап 1.
Собственно говоря сама установка
#make -C /usr/ports/devel/git install clean

У меня собрано со следующими опциями
===> The following configuration options are available for git-1.7.6.1:
     GUI=off "Enable building of GUI tools"
     SVN=on "Enable required dependencies for SVN tools"
     SVN_FBSD=off "Use subversion-freebsd dependency (implies SVN)"
     GITWEB=on "Install gitweb"
     CONTRIB=off "Install contributed scripts"
     P4=on "Enable Perforce support"
     CVS=on "Enable CVS support"
     HTMLDOCS=off "Install additional documentation"
     PERL=on "Build perl based git tools"
     ICONV=on "Support for multiple character encodings"
     CURL=on "Support HTTP push and pull"
     ETCSHELLS=on "Modify /etc/shells"
===> Use 'make config' to modify these settings

Ставим gitosis
#make -C /usr/ports/devel/py-gitosis install clean

Создадим пользователя под которым будет работать git через sysinstall
Заходим теперь под пользователем git
#su git

Генерим ключ и добавляем его через gitosis-init, это нужно для работы на клиентском машине по ключам ssh
git>ssh-keygen
git>gitosis-init < .ssh/id_rsa.pub

В принципе на этом предварительная настройка закончилась

По умолчанию создается один репозиторий gitosis-admin через который мы собственно говоря и будем админить git
симлинк на его конфиг лежить в хомяке
git>cat .gitosis.conf
[gitosis]
loglevel = DEBUG
[group gitosis-admin]
writable = gitosis-admin
members = git@youserv

writable это собственно говоря название репозитория, у клиента он будет отображаться как <reponame>.git
group никакого смысла не несет,просто название группы
Поправим rc.conf
#echo 'git_daemon_enable="YES"' >> /etc/rc.conf
#echo 'git_daemon_flags="--syslog --base-path=/home/git/repositories \
--export-all --detach"' >> /etc/rc.conf;

Вот теперь на стороне сервера все закончено

Этап 2.

На клиенте я использую тоже *nix. Поэтому буду обьяснять как все делать из консоли
Прописываем приватный ключ пользователя гит
cat .ssh/config
Host youserv
User git
IdentityFile ~/.ssh/git_id_rsa

Забираем репозиторий с сервера
mkdir git
cd git
git clone ssh://git@youserv/gitosis-admin.git

Это тот самый репозиторий, которые является по сути админской частью
Создадим теперь несколько репозиториев на сервер и добавим парочку пользователей
username>cd gitosis-admin
username>cat gisosis.conf
[gitosis]
loglevel = DEBUG
[group gitosis-admin]
writable = gitosis-admin
members = git@youserv
[group test]
writable = test
members = git@youserv test@youserv

username>cp ~/keys/test_id_rsa.pub keydir/test@youserv.pub
username>git add .
username>git commit -a -m 'create new repo and add key'
username>git push

Все, теперь у нас на сервере создан еще один репозиторий с которым можно работать.
Немного расскажу про формат адреса для работы с git
В нашем случае это ssh://git@youserv/reponame.git, git@ это тот пользователь под которым запущен сервис git, если бы запустили под gitserv то соотвественно было бы так ssh://gitserv@youserv/reponame.git, это было моей первой ошибкой над которой я бился

Пожалением программистов было чтобы измения вносимые в репозиторий сразу же появлялись на сервере, то есть обьясняю, имеет сайт, который все время дописывают, чтобы забрать данные поступившие в репозиторий и выложить их в /usr/local/www/<youdomain> приходилось выполнять вручную манипуляции
>cd /usr/local/www/<youdomain> 
>git pull
>git merge origin/master

это не совсем удобно
Поэтому можно использовать так называемые хуки
они лежат в ~/reposutories/<reponame>.git/hooks
Вот пример реализации выкладывания в livе сразу же после внесния измений
> cat /home/git/repositories/<reponame>.git/hooks/post-update
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
unset GIT_DIR
cd /usr/local/www/<youdomain> 
git pull
git merge origin/master
exec git update-server-info

без unset GIT_DIR не работало
Всем удачи, жду критики

PS:По большей части копирайт+свой опыт
URL:
http://habrahabr.ru/blogs/Git/127213/



размещено: 2011-09-14,
последнее обновление: 2011-10-24,
автор: manefesto


эцосамое, 2011-09-14 в 9:33:52

>#python setup.py install

шлакварщик штоле? помойку в системе устараивать

manefesto, 2011-09-14 в 12:21:34

нету в портах.
Хотя стоп, есть

ЛУЫ, 2011-12-27 в 23:21:55

gitolite удобнее.
Кому интересно: http://www.calculate-linux.org/main/ru/gitolite

ttys, 2013-03-01 в 15:08:24

надо бы заменить su git на su - git



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0453 секунд
Из них PHP: 29%; SQL: 71%; Число SQL-запросов: 77 шт.
Исходный размер: 21824; Сжатая: 6253