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