Pull to refresh

Устанавливаем и настраиваем cGit на Ubuntu

Reading time5 min
Views13K
С помощью данной статьи (пошаговой инструкции) вы сможете сделать себе собственный Git репозиторий, с веб-интерфейсом на базе cGit.

Вот так, просто и лаконично, выглядит стандартный cGit (кликабельно):


Сейчас стали очень популярны виртуальные выделенные серверы (VPS, VDS). За 5-15 долларов в месяц можно позволить себе пользоваться почти полноценным хостингом, с индивидуальными настройками, неплохими ресурсами и почти всем, что душа пожелает. Моя душа желает пользоваться системой контроля версий Git. У неё очень много плюсов, среди которых главные — это скорость и удобство. Я достаточно долго пользовался SVN (не по собственной воле) и я был очень удивлён, когда попробовал Git. Процесс разработки, слияния веток, переключения с ветки на ветку и обновление проходит чрезвычайно удобно, быстро и беспроблемно! В качестве веб-морды я выбрал cGit, потому что встретил довольно много мест, где её используют, он маленький и быстрый. А так же потому, что мне очень не понравился gitweb, который почему-то более популярен. На моём сервере и клиенте установлена ОС Ubuntu 9.04 и 9.10 соответственно. Все действия будут выполняться в консоли. Инструкция расчитана на начинающего пользователя.

В первую очередь (если вы этого до сих пор не сделали) нам нужно будет установить LAMP на удалённом компьютере (он же сервер, он же будущее хранилище). Для этого в убунте достаточно выполнить:
sudo tasksel install lamp-server

Далее мы скачаем свежую версию cGit и скомпилируем её. Для этого нам нужны некоторые библиотеки и программы. Чтобы их установить — выполните:
sudo apt-get install libcurl4-openssl-dev git-core build-essential mc

Мы установили пакеты для компиляции, файловый менеджер mc (c его очень удобным редактором mcedit) и непосредственно набор утилит Git. Приступим к компиляции и установке:
git clone git://hjemli.net/pub/git/cgit
cd cgit/
git submodule init
git submodule update
make

Скачается порядка 20 МБ. Дождитесь успешной компиляции и линковки (обычно не дольше нескольких минут). В результате у нас появился cgi-скрипт, лого и css файл для будущего репозитория. cGit мы установим и настроим вручную.

Дальше возможно несколько вариантов, в зависимости от того, как вы хотите получать доступ к cGit. Мне было удобно обращаться к поддомену. Например так: git.example.ru. Для этого создадим новый виртуальный хост (имя удалённого пользователя — projects):
sudo touch /etc/apache2/sites-available/cgit
sudo mcedit /etc/apache2/sites-available/cgit

И вставим в содержимое файла кусок кода (не забудьте поменять домен на свой):

<VirtualHost *:80> 
    ServerName git.example.ru
    DocumentRoot /home/projects/www/cgit
    DirectoryIndex cgit.cgi
    SetEnv CGIT_CONFIG /etc/cgitrc

    <Directory "/home/projects/www/cgit">
        Options FollowSymlinks ExecCGI
        Allow from all
        AllowOverride all
        Order allow,deny

        <Files cgit.cgi>
            SetHandler cgi-script
        </Files>
    </Directory>

    <Directory "/home/projects">
        Allow from all
    </Directory>
</VirtualHost>


Создадим директорию для cGit и скопируем туда скомпилированные файлы:

mkdir ~/www/cgit -p
cd ~/cgit
cp cgit ~/www/cgit/cgit.cgi
cp cgit.png ~/www/cgit/
cp cgit.css ~/www/cgit/

Создадим конфигурационный файл для cGit и пропишем в него настройки:
sudo touch /etc/cgitrc
sudo mcedit /etc/cgitrc

Откроется редактор. Вот моё содержимое конфига, с комментариями:
#Относительный путь для всего остального
virtual-root=/

#Путь к картинке логотипа и стилям.
css=/cgit.css
logo=/cgit.png

#Директория для автоматического сканирования Git репозиториев.
scan-path=/home/projects

#Дополнительные ссылочки и информация...
enable-index-links=1
enable-log-filecount=1
enable-log-linecount=1

#Заголовок репозитария
root-title=Мои репозитории

#Подзаголовок
root-desc=Зачем откладывать на завтра то, что можно отложить на послезавтра?

#Разрешаем скачивание репозитариев, веток или коммитов архивами (очень удобная вещь)
snapshots=tar.gz tar.bz2 zip

#Список статических (кроме тех, что подхватываются автоматически) репозиториев

repo.url=temp
repo.path=/home/sartor/www/temp/.git
repo.desc=Это репозиторий для тестов
repo.owner=Sartor

repo.url=exp
repo.path=/home/sartor/www/exp/.git
repo.desc=Experimentum
repo.owner=Sartor

Теперь всё готово для запуска. Добавим виртуальный хост в список разрешённых и перезапустим апач:
sudo a2ensite cgit
sudo /etc/init.d/apache2 restart

Заходим на git.example.ru и убеждаемся, что всё работает.
Если появилась 50х ошибка, то нужно сделать следующее:
sudo touch ~/www/cgit/.htaccess
sudo mcedit ~/www/cgit/.htaccess

И вставить следующее содержимое (не забудьте изменить пути на свои):
RewriteEngine on

RewriteCond %{HTTP_HOST} ^git\.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]

RewriteCond %{HTTP_HOST} ^git\.
RewriteRule ^git/$ /home/projects/www/cgit/cgit.cgi [L]

RewriteCond %{HTTP_HOST} ^git\.
RewriteRule ^(.*)$ /home/projects/www/cgit/cgit.cgi?url=$1 [L,QSA]

Теперь точно будет работать :)
Чтобы проверить, правильно ли всё работает создадим репозиторий с одним файлом:
mkdir ~/test
cd ~/test
touch habr.txt
echo "Здоровья тебе, хабраюзер" > habr.txt
git init
git add .
git commit -m "Первый коммит"

Обновляем старничку в браузере и видим наш первый коммит.

Подведу итоги того, что мы сделали и как этим пользоваться:
На удалённом сервере мы создали веб-интерфейс для популярной системы контроля версий Git. Доступ к ней происходит через поддомен git.

Опишу примерный сценарий разработчика:
  1. Создаю на сервере новую папку (например www/test) в домашней.
  2. Делаю в ней git init.
  3. На локальной машине делаю git clone projects@example.ru:www/test/.git. Это создаст локальную копию удалённого репозитория (пока пустого).
  4. Накидываю кучу файлов в локальную папку, которую мы создали на предыдущем шаге. Делаю, так сказать, каркас проекта. Если нужно — добавляю исключения (.gitignore).
  5. Выполняю git add . && git commit && git push, комментирую свои изменения.
  6. Всё. Локальный и удалённый репозиарии обновлены и синхронизированны.
  7. Работаю над проектом. После каких-либо осмысленных изменений делаю вновь шаг 5. Не забывайте предварительно зайти в ту папку, с которой работали. Особо ленивые хитрые могу сделать алиасы для баша.

Если вы веб-разрабочик и вам нужно довольно часто показывать текущий результат работы — очень полезно будет положить файл post-receive в папку .git/hooks какого-либо проекта с таким содержимым:
#!/bin/sh
cd ..
env -i git checkout -f
echo "Удалённый репозиторий успешно обновлён!"

И дайте ему права на исполнение. Теперь после каждого обновления (шаг 5) будет также обновляться рабочее дерево проекта и реальные файлы всегда будут последней, актуальной версии (а этого почти все и ожидают, когда обновили удалённый репозиторий, но так по умолчанию не происходит).

Обучение работы с git происходит быстро и интуитивно. По этой СКВ есть множество информации на разных языках, а с веб-интерфейсом пользоваться будет ещё легче.

На чистоту конфигов не претендую, админ из меня не очень. Но они гарантированно работают.
Tags:
Hubs:
+17
Comments9

Articles

Change theme settings