| С помощью данной статьи (пошаговой инструкции) вы сможете сделать себе собственный 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 происходит быстро и интуитивно. По этой СКВ есть множество информации на разных языках, а с веб-интерфейсом пользоваться будет ещё легче. На чистоту конфигов не претендую, админ из меня не очень. Но они гарантированно работают
|