2016-02-11 16:10:14

Настраиваем сервер gitolite и клиента на Mac OS

Linux Git Mac OS

В качестве возможности провести свободное время, расскажу свой опыт настройки сервера gitolite на Linux машине и организовать работу клиента на Mac OS :)

На старте у нас имеется сервер под управлением CentOS, который будет выступать хостингом репозиториев; и клиент на Mac OS Yosemite, который будет с ним работать.

Подготовительный этап

Для самого начала нам потребуются ssh ключи. На любой машине генерим приватный и публичный ключ командой

ssh-keygen -t rsa

После этого будет создана пара ключей 

~/.ssh/id_rsa.pub
и
~/.ssh/id_rsa

Эти ключи будут использоваться для администратора gitolite, но их так же можно использовать и для себя в качестве клиента, поэтому можно создавать их и на клиентской машине. Далее я буду рассматривать ситуацию когда эти ключи используются как для админа так и для клиента, поэтому приватный ключ должен оказаться на клиентской машине, например в файле ~/.ssh/git, а публичный - на сервере в файле /tmp/git.pub.

Важное замечание, если вы генерите non-openssh public keys, например, при помощи PuTTY gen, то для использования в gitolite публичный ключ придется конвертировать командой

ssh-keygen -i -f /tmp/ssh2/YourName.ppk > /tmp/openssh/YourName.pub

Это типичная проблема при использовании, например, TurtoiseGit на windows, когда для того чтоб он принял ключ он должен быть в формате *.ppk, а на сервере - в фомате openssh.


Настраиваем gitolite на сервере

Итак публичный ключ администратора у нас лежит в /tmp/git.pub, начинаем с установки gitolite.

Для начала надо понять какой gitolite нам доступен при помощи

yum search gitolite

а потом переходим к установке

sudo yum install gitolite3
sudo useradd git
sudo su git
gitolite setup -pk /tmp/git.pub

На этом в общем вся настройка готова. Если подробнее, то штатным способом ставим gitolite, потом  мы добавляем пользователя git под которым будет осуществляться работа gitolite, и из под этого пользователя делаем первичную настройку gitolite.

В результате в /home/git у нас появилась папка repostitories в которой два репозиторя

[git@host repositories]$ ll
итого 8
drwx------. 8 git git 4096 фев 11 15:50 gitolite-admin.git
drwx------. 7 git git 4096 фев 11 15:50 testing.git

gitolite-admin предназначен для управления пользователями и правами, а
testing - это репозиторий с которым можно поиграться.

Управление конфигураций gitolite осуществляется через коммиты в gitolite-admin, поэтому об этом я расскажу ниже, после настройки клиента.

Настраиваем git клиента на Mac OS

В принципе git на Mac OS Yosemite уже есть, но чтоб им пользоваться надо ставить XCode, поэтому берем и ставим git с официального сайта.

Далее, в принципе, можно жить и работать с git в консоли, но я для себя выбрал gui клиента SourceTree, он бесплатен, хоть и требует регистрации через месяц, но она тоже бесплатная. В целом им вполне удобно пользоваться даже после виндового TurtoiseGit. Далее рассказ буду вести исходя из того что у меня SourceTree.

Итак наш приватный ключ у нас в ~/.ssh/id_rsa и наш сервер имеет адрес git.myhost.com.

Для начала нужно объяснить ssh что на git.myhost.com нужно для пользователя git авторизовываться при помощи ключа, идем и правим/создаем ~/.ssh/config в котором пишем:

Host git.myhost.com
    HostName git.myhost.com
    User git
    IdentityFile ~/.ssh/id_rsa

Далее открываем SourceTree и в нем жмем новый репозиторий -> клонировать по URL. Заполняем поле URL источника

git@git.myhost.com:gitolite-admin

Остальные на свое усмотрение. Открываем репозиторий и нажимаем "получить", теперь у нас есть текущая конфигурация нашего gitolite. После ее изменения коммитим и отправляем данные в удаленный репозиторй для изменения конфигурации.

На этом процесс настройки клиента закончен.

Пара слов про конфигурацию gitolite

Вся она расположена в репозитории gitolite-admin, который состоит из двух папок conf и keydir. Внутри keydir хранятся публичные ключи пользователей, где имя файла - это логин пользователя. А в conf всего один файл с конфигурацией, которая максимально проста, вот например

@admins = admin superadmin

repo gitolite-admin
    RW+     =   @admins
RW = user1
R = @all

repo testing
    RW+     =   @all

Здесь у нас определена группа admins, с двумя логинами и описаны права на репозитории. Сразу хочу заметить что при помощи @ можно создавать не только группы пользователей, но и группы репозиориев.

Описание возможных прав:

  • R - только чтение
  • RW - чтение добавление коммитов, запрещен rewind (push --force)
  • RW+ - полный доступ
  • RWC - возможность создавать ветку
  • RWD - возможность удалять ветку
  • - запретить запись

Объекты доступа могут быть:

  • master@ - ветки
  • ref/tags - теги (версии)
  • NAME/имя_файла - имена файлов/каталогов

Более подробно по конфигу можно все найти в гугле или на официальном сайте.

Ну и в заключении набор полезных ссылок по теме: