Про настроку git-сервера на основе gitolite
Создание репозитория:
1.На локальной машине нужно сгенерировать ключ с помощью команды:
$ ssh-keygen -t rsa
Затем полученный ключ (~/.ssh/id_rsa.pub) закинуть на сервер где будет установлен гит (допустим сюда /tmp/user.pub)
2. заходим на сервер через ssh и на сервере устанавливаем гит и гитулайт.
sudo apt-get install git gitolite
3. создаем пользователя gitolite
$ sudo useradd -m gitolite
и переключаемся на пользователя gitolite
$ sudo su gitolite
4. произведем настройку gitolite выполнив команду:
$ gl-setup /tmp/user.pub
При этом откроется редактор. Нужно просто выйти из него набрав :x для сохранения и выхода из редактора. Выйти из под пользователя gitolite.
Настройка сервера при этом завершена.
5. На локальной машине получим репозитарий gitolite-admin (не какой авторизации и ввода пароля при выполнении этой операции не требуется. Если происходит запрос авторизации значит неверно передан ключ в gitolite)
git clone gitolite@198.191.236.199:gitolite-admin.git Cloning into 'gitolite-admin'... remote: Counting objects: 6, done. remote: Compressing objects: 100% (4/4), done. Receiving objects: 100% (6/6), done. remote: Total 6 (delta 0), reused 0 (delta 0)
gitolite-admin содержит две папки:
Директория keys — это файлы ключами пользователей репозитория.
Директория conf это файлы конфигурации gitolite.
Нас интересует conf/gitolite.conf:
repo gitolite-admin RW+ = admin repo testing RW+ = @all
Содержимое этого файла означает что на гит-сервере создано два репозитория: gitolite-admin и testing.
К репозиторию gitolite-admin доступ на чтение и запись имеет пользователь с ключом сохраненным в файле keys/user.pub.
К репозиторию testing доступ на чтение и запись имеют все пользователи.
6. Добавим новый репозиторий изменив файл conf/gitolite.conf следующим образом:
repo gitolite-admin RW+ = user repo testing RW+ = @all repo boot_ctrl RW+ = @all
После этого следует сохранить изменения (commit) и выполнить операцию (push) для отправки изменений на сервер:
$ git commit -am 'Add new project' $ git push origin master
После этого можно проверить себя выполнив команду, которая покажет список репозитариев на гит-сервере:
ssh gitolite@198.191.236.199 info hello user, this is gitolite 2.2-1 (Debian) running on git 1.7.9.5 the gitolite config gives you the following access: @R_ @W_ boot_ctrl R W gitolite-admin @R_ @W_ testing
Также можно подключить к серверу по ssh и просмотреть список репозиторием через команду ls
$ ssh gore_user@198.191.236.199 sudo ls -l /home/gitolite/repositories/ итого 12 drwx------ 7 gitolite gitolite 4096 июля 7 15:38 boot_ctrl.git drwx------ 8 gitolite gitolite 4096 июля 7 15:38 gitolite-admin.git drwx------ 7 gitolite gitolite 4096 июля 7 15:38 testing.git
7. Новый проект создан, но при этом он пуст.
Как добавить данные в созданный репозиторий gitolite:
На локальной машине инициализируем репозиторий git стандартной командой в папке с исходным кодом проекта:
$ git init
Связываем локальный репозиторий с сервером:
$ git remote add origin gitolite@198.191.236.199:boot_ctrl.git
либо клонируем пустой репозиторий, а потом в него добавляем проект:
$ git clone gitolite@198.191.236.199:boot_ctrl.git
После этого добавляем файлы (add), сохраняем данные (commit) и отправляем изменения на сервер (push)
$ git add . $ git commit -am "Initial commit" $ git push origin master
Для синхронизации локальной копии с сервером gitolite можно использовать команду:
git pull origin master
Для удаления репозитория из gitolite:
1. удаляем репозизиторий из файла conf/gitolite.conf.
2. делаем commit и push.
3. заходим на сервер по ssh и удаляем директорию в /home/gitolite/repositories/ ручками.
Для сброса админа в gitolite.
В случае если утерян админский ключ или администрирование осуществляется с другого места следует сбросить админский ключ следующим образом:
1. генерим новый ключ
$ ssh-keygen -t rsa
и закидываем его по ssh на сервер в папочку /tmp. Причем имя нового ключа должно совпадать с именем админа из файла gitolite.conf.
Для примера в файле gitolite.conf:
repo gitolite-admin RW+ = super_admin
то и имя файла должно быть /tmp/super_admin.pub
2. выполнить
gl-setup /tmp/super_admin.pub
3. если при выполнении клонирования появляется вот такая ошибка:
$ git clone gitolite@193.191.236.199:gitolite-admin.git Cloning into 'gitolite-admin'... Agent admitted failure to sign using the key.
то следует выполнить:
$ ssh-add
и полсле этого повторить клонирование. Должно быть ок.
Для публичного доступа через gitweb на сервер gitolite
Движек Gitweb позволяет с помощью браузера получить доступ к серверу gitolite. При этом возможна проблема когда мы заходим на страничку gitweb и не видим списка репозиториев, поэтому требуется донастроить.
1. Файл /etc/gitweb.conf. Следующие поля должны содержать корректный путь до соответствующих файлов/директорий
$projectroot = "/home/gitolite/repositories"; $projects_list = '/home/gitolite/projects.list';
2. Изменить в файле /home/gitolite/.gitolite.rc поле REPO_UMASK
$REPO_UMASK = 0022;
3. изменить права для:
sudo chmod a+r /home/gitolite/projects.list chmod a+rx /home/gitolite/repositories
4. В файле gitolite-admin/conf/gitolite.conf добавить пользователя gitweb как то так:
repo testing RW+ = @all R = gitweb daemon repo testing_2 RW+ = @all R = gitweb daemon
Создадим новый репозиторий и проверим что он будет виден через gitweb. Для этого откроем в браузере адрес сервера или в локалном случае он будет выглядеть так:
http://127.0.0.1/gitweb
При этом репозитории которые были созданы до применения этих настроек всё равно не будут видны через gitweb, поэтому для них нужно ручками задать права как то так:
chmod -R a+rX /home/gitolite/repositories/testing_1.git
Изменение в строке адреса при доступе через gitweb.
По умолчанию доступ к репозитарию с помощью gitweb имеет следующий адрес - http://127.0.0.1/gitweb. В файле /etc/apache2/conf.d/gitweb можно изменить адресную строку, например вот так
Alias /new_repo /usr/share/gitwebOptions +FollowSymLinks +ExecCGI AddHandler cgi-script .cgi
И тогда доступ с помощью gitweb к репозиторию будет по адресу - http://127.0.0.1/new_repo
gitweb и добавление категорий.
По умолчанию при просмотре репозитария gitolite через gitweb все проекты представлены одним списком. Если нужно разделить проекты на категории то нужно сделать следующее:
1. В файле .gitolite.rc
строку $GL_GITCONFIG_KEYS привести к виду:
$GL_GITCONFIG_KEYS = ".*";
2. В файле /etc/gitweb.conf добавить поле
$projects_list_group_categories = 1;
3. Файл gitolite-admin/conf/gitolite.conf привести к виду:
repo alpha/testing_6 RW+ = @all R = gitweb daemon config gitweb.category = "Репозитории проекта alpha" repo beta/testing_7 RW+ = @all R = gitweb daemon config gitweb.category = "Репозитории проекта beta"
Ограничение доступа к серверу gitolite через gitweb.
По умолчанию все пользователи имеют возможность зайти по адресу http://127.0.0.1/gitweb и получить доступ к репозиторию через gitweb. Чтобы добавить ограничение доступа через gitweb нужно:
1. Создать файл .htpasswd в домашней директории /home/gitolite/.htpasswd
2. Привести файл /etc/apache2/conf.d/gitweb к виду
Alias / new_repo /usr/share/gitwebOptions +FollowSymLinks +ExecCGI AddHandler cgi-script .cgi Options ExecCGI FollowSymLinks Indexes AuthName "git repo" AuthType Basic AuthUserFile /home/gitolite/.htpasswd Require valid-user
3. Создать пользователя и задать ему пароль:
sudo htpasswd /home/gitolite/.htpasswd UserName
Публичный доступ к серверу gitolite с использованием git-daemon.
Настройка доступа к серверу gitolite без авторизации:
1. Создаем файл etc/init.d/git-daemon
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=git-daemon PIDFILE=/var/run/$NAME.pid DESC="the git daemon" DAEMON=/usr/lib/git-core/git-daemon DAEMON_OPTS="--base-path=/home/gitolite/repositories --verbose --syslog --detach --pid-file=$PIDFILE --user=gitolite --group=nogroup" test -x $DAEMON || exit 0 [ -r /etc/default/git-daemon ] && . /etc/default/git-daemon . /lib/lsb/init-functions start_git() { start-stop-daemon --start --quiet --pidfile $PIDFILE \ --startas $DAEMON -- $DAEMON_OPTS } stop_git() { start-stop-daemon --stop --quiet --pidfile $PIDFILE rm -f $PIDFILE } status_git() { start-stop-daemon --stop --test --quiet --pidfile $PIDFILE >/dev/null 2>&1 } case "$1" in start) log_begin_msg "Starting $DESC" start_git log_end_msg 0 ;; stop) log_begin_msg "Stopping $DESC" stop_git log_end_msg 0 ;; status) log_begin_msg "Testing $DESC: " if status_git then log_success_msg "Running" exit 0 else log_failure_msg "Not running" exit 1 fi ;; restart|force-reload) log_begin_msg "Restarting $DESC" stop_git sleep 1 start_git log_end_msg 0 ;; *) echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0
Проверить ключи —base-path,--user на правильность значений (значение ключа —user=gitolite должно браться из ключа --base-path=/home/gitolite/repositories)
2. Запустить git-daemon:
chmod a+x /etc/init.d/git-daemon /etc/init.d/git-daemon start
3. Добавить пользователя daemon для доступа к требуемому репозиторию в файле gitolite-admin/conf/gitolite.conf
repo alpha/testing_9 RW+ = @all R = gitweb daemon
4. Получить репозиторий:
git clone git://127.0.0.1/testing_9
либо так:
git clone git://127.0.0.1/testing_9 temp_prj_name
Добавление нового пользователя в gitolite
1. Сгенерить ключ на том компьютере откуда будет осуществляться доступ к репозиторию:
$ ssh-keygen -t rsa
и помеместить его в локальный репозиторий gitolite-admin/keydir. Имя ключа будет именем нового пользователя. Для примера: user2.pub
2. Добавить нового пользователя в те репозитории к которым у него должен быть доступ изменяя файл gitolite-admin/conf/gitolite.conf
можно так:
repo testing_3 RW+ = user2
или так:
repo testing_2 RW+ = @all
или так для получения админских прав:
repo gitolite-admin RW+ = admin_dima user2
3. Сделать коммит админского репозитория:
git commit -am "add new" git push origin master
4. Склонировать репозиторий:
git clone git@192.168.0.10:testing_3.git