Заметка скорее для себя, на память…
Цель работы:
Настроить репозиторий git с доступом по протоколу HTTP и web-интерфейсом
Приборы и материалы:
- сервер с ubuntu (debian)
- apache2 (будем работать по HTTP)
- git (ради него все и затевалось)
- gitweb (веб-морда)
Теория
git прекрасно работает с удаленными репозиториями по протоколу HTTP, для реализации со стороны сервера будем использовать apache2 с модулем dav_fs. В качестве авторизации воспользуемся штатными средствами apache2 (AuthType Basic).
В качестве дополнительных плюшек, запустим GitWeb (тот самый, который используется на kernel.org
Порядок выполнения работы:
- Если не установлен, устанавливаем apache2:
$ sudo apt-get install -y apache2 - Включаем модуль dav_fs:
$ sudo a2enmod dav_fs - Включаем (если еще не включен) mod_rewrite:
$ sudo a2enmod rewrite - Устанавливаем GitWeb из репозитория ubuntu (debian):
$ sudo apt-get install -y gitweb - Создаем папку с репозиториями:
$ sudo mkdir -p /srv/git - Добавляем к виртуальный хост настройки DAV, MOD_REWRITE и алиасы GitWeb:
<VirtualHost *:80> ServerAdmin root@example.com ServerName git.example.com ServerAlias git # путь до папки с репозиториями DocumentRoot /srv/git DirectoryIndex gitweb.cgi SetEnv GITWEB_CONFIG /etc/gitweb.conf RewriteEngine on RewriteRule ^/$ /gitweb [PT] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d # исключаем из подстановки системные объекты git # - к ним обращаемся непосредственно RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !/git/[a-zA-Z0-9-]+\.git/(HEAD|info|objects|refs) RewriteRule ^/git/(.*) /gitweb%{REQUEST_URI} [PT] ScriptAlias /gitweb /usr/lib/cgi-bin/gitweb.cgi Alias /gitweb.css /usr/share/gitweb/static/gitweb.css Alias /git-logo.png /usr/share/gitweb/static/git-logo.png Alias /git-favicon.png /usr/share/gitweb/static/git-favicon.png Alias /gitweb.js /usr/share/gitweb/static/gitweb.js Options Indexes FollowSymlinks ExecCGI <Directory /> # Включаем DAV Dav on # И авторизацию AuthType Basic AuthName "Only the chosen pass..." AuthUserFile /etc/apache2/git-passwd Require valid-user </Directory> # устанавливаем обработчик <Files gitweb.cgi> SetHandler cgi-script </Files> ErrorLog /var/log/apache2/git-error.log LogLevel warn CustomLog /var/log/apache2/git-access.log combined </VirtualHost>
сохраняем в /etc/sites-availible/git.example.com
включаем сайт:
$ sudo a2ensite git.example.com
не забываем про файл с паролями:
$ sudo htpasswd -c -b /etc/apache2/git-passwd user password
и перезагружаем apache2: $ sudo service apache2 restart - Настраиваем GitWeb (/etc/gitweb.conf)
$projectroot = "/pub/git"; $git_temp = "/tmp"; $home_link = $my_uri || "/"; $home_text = "indextext.html"; $projects_list = $projectroot; @stylesheets = ("gitweb.css"); $javascript = "gitweb.js"; $logo = "git-logo.png"; $favicon = "git-favicon.png"; @diff_opts = ();
От настроек по-умолчанию отличается только $projectroot и путем до файлов
Создание репозитория:
Репозиторий git создается в пустой папке с ключем —bare, тогда он не будет содержать локальной копии файлов, а dav_fs и WebGit будет общаться напрямую с базой данных git:
$ sudo mkdir -p /srv/git/test.git && cd /srv/git/test.git && git init —bare && git update-server-info
Описание репозитория находится в файле description, по желанию можно отредактировать любым текстовым редактором.
После создания, нужно сделать hook post-update с командой git update-server-info, он уже имеется в семплах, под названием hooks/post-update.sample, остается только переименовать его. А так же разрешить доступ для записи apache2, если с репозиторием предстоит работать только через apache2, можно сменить владельца всей папки:
$ sudo chown -R www-data.www-data /srv/pub
Выводы:
Теперь можно клонировать на удаленном компьютере:
$ git clone http://user:password@git.example.com/test.git
добавить файл:
$ cd test.git
$ echo TEST > readme.txt
добавить его в git:
$ git add .
создать коммит:
$ git commit -m «Initial commit»
и залить на удаленный сервер:
$ git push origin master