С помощью данной статьи (пошаговой инструкции) вы сможете сделать себе собственный Git репозиторий, с веб-интерфейсом на базе cGit. Вот так, просто и лаконично, выглядит стандартный cGit (кликабельно):
Сейчас стали очень популярный виртуальные выделенные серверы (VPS, VDS). За 5-15 долларов в месяц можно позволить себе пользоваться почти полноценным хостингом, с индивидуальными настройками, неплохими ресурсами и почти всем, что душа пожелает. Моя душа желает пользоваться системой контроля версий Git. У неё очень много плюсов, среди которых главные — это скорость и удобство. Я достаточно долго пользовался SVN (не по собственной воле) и я был очень удивлён, когда попробовал Git. Процесс разработки, слияния веток, переключения с ветки на ветку и обновление проходит чрезвычайно удобно, быстро и беспроблемно! В качестве веб-морды я выбрал cGit, потому что встретил довольно много мест, где её используют, он маленький и быстрый. А так же потому, что мне очень не понравился gitweb, который почему-то более популярен. На моём сервере и клиенте установлена ОС Ubuntu 9.04 и 9.10 соответственно. Все действия будут выполняться в консоли. Инструкция расчитана на начинающего пользователя.
В первую очередь (если вы этого до сих пор не сделали) нам нужно будет установить LAMP на удалённом компьютере (он же сервер, он же будущее хранилище). Для этого в убунте достаточно выполнить:
Quote
sudo tasksel install lamp-server
Далее мы скачаем свежую версию cGit и скомпилируем её. Для этого нам нужны некоторые библиотеки и программы. Чтобы их установить — выполните:
Quote
sudo apt-get install libcurl4-openssl-dev git-core build-essential mc
Мы установили пакеты для компиляции, файловый менеджер mc (c его очень удобным редактором mcedit) и непосредственно набор утилит Git. Приступим к компиляции и установке:
Quote
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):
Quote
sudo touch /etc/apache2/sites-available/cgit
sudo mcedit /etc/apache2/sites-available/cgit
И вставим в содержимое файла кусок кода (не забудьте поменять домен на свой):
Code
<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 и скопируем туда скомпилированные файлы:
Quote
mkdir ~/www/cgit -p
cd ~/cgit
cp cgit ~/www/cgit/cgit.cgi
cp cgit.png ~/www/cgit/
cp cgit.css ~/www/cgit/
Создадим конфигурационный файл для cGit и пропишем в него настройки:
Quote
sudo touch /etc/cgitrc
sudo mcedit /etc/cgitrc
Откроется редактор. Вот моё содержимое конфига, с комментариями:
Quote
#Относительный путь для всего остального
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
Теперь всё готово для запуска. Добавим виртуальный хост в список разрешённых и перезапустим апач:
Quote
sudo a2ensite cgit
sudo /etc/init.d/apache2 restart
Заходим на git.example.ru и убеждаемся, что всё работает.
Если появилась 50х ошибка, то нужно сделать следующее:
Quote
sudo touch ~/www/cgit/.htaccess
sudo mcedit ~/www/cgit/.htaccess
И вставить следующее содержимое (не забудьте изменить пути на свои):
Quote
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]
Теперь точно будет работать
Чтобы проверить, правильно ли всё работает создадим репозиторий с одним файлом:
Quote
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 какого-либо проекта с таким содержимым:
Quote
#!/bin/sh
cd ..
env -i git checkout -f
echo "Удалённый репозиторий успешно обновлён!"
И дайте ему права на исполнение. Теперь после каждого обновления (шаг 5) будет также обновляться рабочее дерево проекта и реальные файлы всегда будут последней, актуальной версии (а этого почти все и ожидают, когда обновили удалённый репозиторий, но так по умолчанию не происходит). Обучение работы с git происходит быстро и интуитивно. По этой СКВ есть множество информации на разных языках, а с веб-интерфейсом пользоваться будет ещё легче.
На чистоту конфигов не претендую, админ из меня не очень. Но они гарантированно работают