Задача: развернуть git, как репозитарий для моих тестов. Модель ветвления репозитария на отдельные ветки для каждого из проектов при сохранении универсальной и стабильной версии. И приобщить доступ к репозитарию GIT через Web–интерфейс.
В данной заметке я не претендую на полное объяснение всей поставленной задачи, я просто с каждым днем разбираюсь и разбираюсь и по этому отдельно интересные вещи стараюсь вынести на всеобщее обозрение посредством моего блога. Надеюсь, что заинтересованные найдут здесь что-то полезное для себя и смогут адаптировать показанный материал на благо своих задач.
Имею систему Ubuntu 12.04.5 Server amd64 внутри Virtualbox на гостевой системе Ubuntu 12.04.5 Desktop amd64 на которой будет продемонстрирована установка GIT сервиса и для наглядности работы установлен Web–интерфейс.
Есть исходный сервер Ubuntu 12.04.5 Server am64
и доступ в интернет посредством которого буду доустанавливаться необходимые пакеты.
Отобразить все снапшоты для виртуальной машины с хостовой системы:
keiz@dv6:~$ VBoxManage snapshot userver list | grep Name:
Name: OriginalSystem (UUID: 1af0a374-b693-4a67-b2eb-afce06d9250a)
Name: Release Ubuntu 12.04.4 Server (UUID: 9e187d63-3dab-4d03-8025-ca6d7d7746d7)
Name: Nagios3 (UUID: 2603c784-e2ed-489c-a62e-0744e6231ba2)
Name: Cacti_default (UUID: b5ba1b6b-1454-4fa4-8fd5-1605d2b76e30)
Name: OriginalWlan0 (UUID: ccecb4a2-f174-46ad-bd7d-3a32fd74998b) *
Name: Cacti+snmp+localhost (UUID: b0e36d14-1602-4a62-8515-2f5009cf590e)
Откатываемся к снапшоту с именем: Release Ubuntu 12.04.5 Server
keiz@dv6:~$ VBoxManage snapshot userver restore "Release Ubuntu 12.04.4 Server"
Restoring snapshot 9e187d63-3dab-4d03-8025-ca6d7d7746d7
0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%
Запускаю виртуальную машину с хостовой системы:
keiz@dv6:~$ VBoxManage startvm userver
Waiting for VM “userver” to power on…
VM “userver” has been successfully started.
Подключаюсь к виртуальной машине с хостовой системы по SSH:
keiz@dv6:~$ ssh -l ekzorchik 192.168.1.40 -p 22
Устанавливаем утилиты git & gitweb через репозитарии:
ekzorchik@srv-mon:~$ sudo apt-get install git-core git-svn gitweb -y
Устанавливаем данные для репозитария, чтобы была видна принадлежность коммитов:
ekzorchik@srv-mon:~$ git config --global user.name "git"
ekzorchik@srv-mon:~$ git config --global user.email "git@srv-mon.polygon"
Отобразить настройки глобальной конфигурации:
ekzorchik@srv-mon:~$ git config -l
user.name=git
user.email=git@srv-mon.polygon
ekzorchik@srv-mon:~$ sudo nano /etc/apache2/apache2.conf
ServerName srv-mon
Активируем нужные модули применительно к apache:
ekzorchik@srv-mon:~$ sudo a2enmod dav
ekzorchik@srv-mon:~$ sudo a2enmod dav_fs
ekzorchik@srv-mon:~$ sudo a2enmod rewrite
ekzorchik@srv-mon:~$ sudo a2enmod env
Создаем виртуальный хост, на котором будут находиться наши репозитарии и заодно создаем пустой репозитарий:
ekzorchik@srv-mon:~$ sudo mkdir -p /git.srv-mon/main.git
На заметку: на созданную директорию где находятся все проекты настроим работу от пользователя git и работы с веб-сервером группы www-data
ekzorchik@srv-mon:~$ sudo adduser --system --shell /bin/bash --gecos 'git versions control' --group --disabled-password --home /home/git git
Adding system user `git’ (UID 106) …
Adding new group `git’ (GID 114) …
Adding new user `git’ (UID 106) with group `git’ …
Creating home directory `/home/git’ …
ekzorchik@srv-mon:~$ sudo chown -R git:www-data /git.srv-mon/
ekzorchik@srv-mon:~$ sudo su git -c "chmod -R a+w /home/git/."
ekzorchik@srv-mon:~$ sudo su - git
git@srv-mon:~$ cd /git.srv-mon/
git@srv-mon:/git.srv-mon$ git init
Initialized empty Git repository in /git.srv-mon/.git/
На заметку: В папке /git.srv-mon находятся все проекты. Чтобы создать новый проект в этой директории нужно создать ещё одну директорию, и инициализировать репозитарий командой git init.
git@srv-mon:/git.srv-mon$ git update-server-info
git@srv-mon:/git.srv-mon$ exit
logout
Редактируем конфигурацию Apache:
ekzorchik@srv-mon:~$ sudo nano /etc/apache2/sites-available/git.conf
<VirtualHost *:80>
ServerAdmin admin@srv-mon
ServerName srv-mon
DocumentRoot /git.srv-mon
Alias /git “/git.srv-mon/main.git”
DAVMinTimeout 1000
<Location /git>
DAV on
AuthType Basic
AuthName “Git”
AuthUserFile /git.srv-mon/passwd.git
Require valid-user
</Location>
</virtualhost>
Активируем созданный сайт:
ekzorchik@srv-mon:~$ sudo a2ensite git.conf
Enabling site git.conf.
To activate the new configuration, you need to run:
service apache2 reload
Выключаем сайт по-умолчанию:
ekzorchik@srv-mon:~$ sudo a2dissite default
Site default disabled.
To activate the new configuration, you need to run:
service apache2 reload
Проверяем созданный конфиг на предмет каких либо ошибок:
ekzorchik@srv-mon:~$ sudo apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server srv-mon (/etc/apache2/sites-enabled/git.conf:1)
port 80 namevhost srv-mon (/etc/apache2/sites-enabled/git.conf:1)
Syntax OK
Закомментируем директиву NamevirtualHosts:
ekzorchik@srv-mon:~$ sudo nano /etc/apache2/ports.conf
#NameVirtualHost *:80
Создаем файл с паролями и добавим туда первого пользователя:
ekzorchik@srv-mon:~$ sudo htpasswd -c /git.srv-mon/passwd.git ekzorchik
New password: 712mbddr@
Re-type new password: 712mbddr@
Adding password for user ekzorchik
ekzorchik@srv-mon:~$ sudo chmod 640 /git.srv-mon/passwd.git
ekzorchik@srv-mon:~$ sudo chown -R git:www-data /git.srv-mon/
ekzorchik@srv-mon:~$ sudo chown www-data /git.srv-mon/passwd.git
Теперь нужно перезапустить сервис apache:
ekzorchik@srv-mon:~$ sudo service apache2 restart
Теперь пройдем на http://<username>@<servername>/git браузером, в ответ должен будет задан вопрос об указании пароля для авторизации под указанным пользователем:
http://ekzorchik@srv-mon/git
http://ekzorchik@192.168.1.40/git
Успешным прохождения авторизации будут служить нижеследующий вид:
Вот так вот.
Идем дальше…
Настраиваем веб-интерфейс gitweb, редактируем конфигурационный файл: (приводим к виду)
ekzorchik@srv-mon:~$ sudo nano /etc/gitweb.conf
$projectroot = “/git.srv-mon/main.git/”;
$project_list = $projectroot;
Настраиваем URL (http://IP{DNS}/gitweb) доступа к Web ориентированному представлению:
ekzorchik@srv-mon:~$ sudo nano /etc/apache2/conf.d/gitweb
Alias /gitweb /usr/share/gitweb
<Directory /usr/share/gitweb>
Options FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
</Directory>
Далее в браузере открываем URL: http://srv-mon/gitweb страница пример нижеследующий вид:
Сейчас текущих проектов нет.
Чтобы обезопасить доступ к Web-ориентированному представлению, git файл привести к виду:
ekzorchik@srv-mon:~$ sudo nano /etc/apache2/conf.d/gitweb
Alias /gitweb /usr/share/gitweb
<Directory /usr/share/gitweb>
Options FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName “Git Access”
Require valid-user
AuthUserFile /git.srv-mon/passwd.git
</Directory>
Еще раз поправить права доступа
Сохраняем внесенные изменения и перезапускаем apache2:
ekzorchik@srv-mon:~$ sudo service apache2 restart
Сейчас я покажу как добавить проект: (это команды вводим если не делали их выше для создания проекта)
ekzorchik@srv-mon:~$ sudo su - git
git@srv-mon:~$ cd /git.srv-mon/main.git/
git@srv-mon:/git.srv-mon/main.git$ git init
Initialized empty Git repository in /git.srv-mon/main.git/ .git
git@srv-mon:/git.srv-mon/main.git$ ls -lah .git/
total 40K
drwxrwxr-x 7 git git 4.0K Jun 4 23:46 .
drwxr-xr-x 3 git www-data 4.0K Jun 4 23:46 ..
drwxrwxr-x 2 git git 4.0K Jun 4 23:46 branches
-rw-rw-r– 1 git git 92 Jun 4 23:46 config
-rw-rw-r– 1 git git 73 Jun 4 23:46 description
-rw-rw-r– 1 git git 23 Jun 4 23:46 HEAD
drwxrwxr-x 2 git git 4.0K Jun 4 23:46 hooks
drwxrwxr-x 2 git git 4.0K Jun 4 23:46 info
drwxrwxr-x 4 git git 4.0K Jun 4 23:46 objects
drwxrwxr-x 4 git git 4.0K Jun 4 23:46 refs
Всё, репозитарий создан и можно приступать к работе с системой контроля версий.
git@srv-mon:/git.srv-mon/main.git$ touch example
git@srv-mon:/git.srv-mon/main.git$ git add example
git@srv-mon:/git.srv-mon/main.git$ git commit -m "Initial commit"
Для справки: если в процесс работы с git у вас в консоли будет сообщение:
fatal: This operation must be run in a work tree
данная ошибка означает, что я пытаюсь запустить команды git не из рабочей папки репозитария. Рабочая папка — это папка, в которой находится папка .git (точка git) непосредственно с репозитарием, то нужно отыскать каталог .git
ekzorchik@srv-serv:~$ sudo find / -name .git
[sudo] password for ekzorchik:
/etc/.git
и уже находясь рядом с ним проделать все другие вещи.
Вносим комментарий в проект:
git@srv-mon:/git.srv-mon/main.git$ git commit -m "Initial commit"
*** Please tell me who you are.
Run
git config –global user.email “you@example.com”
git config –global user.name “Your Name”
to set your account’s default identity.
Omit –global to set the identity only in this repository.
fatal: empty ident <git@srv-mon.(none)> not allowed
оказывается, что перед тем как комментировать нужно репозитарию рассказать немного о себе посредством ниже следующий команд:
git@srv-mon:/git.srv-mon/main.git$ git config –list
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
(но лучше для отдельно взятого репозитария использовать:
git config user.name «git»
git config user.email «git@srv-mon.polygon»
git@srv-mon:/git.srv-mon/main.git$ git config --global user.name "git"
git@srv-mon:/git.srv-mon/main.git$ git config --global user.email "git@srv-mon.polygon"
После этого снова пробуем внести комментарий — и все усваивается хорошо:
git@srv-mon:/git.srv-mon/main.git$ git commit -m "Initial commit"
[master (root-commit) f2c87ac] Initial commit
0 files changed
create mode 100644 example
Допустим понадобилось в уже существующий файл внести изменения:
git@srv-mon:/git.srv-mon/main.git$ cat /etc/passwd > example
git@srv-mon:/git.srv-mon/main.git$ git add example
# сделать коммит-подтверждение
git@srv-mon:/git.srv-mon/main.git$ git commit -m “cat /etc/passwd > example”
[master e9b4e67] cat /etc/passwd > example
1 file changed, 27 insertions(+)
Отобразить изменения с файлом:
git@srv-mon:/git.srv-mon/main.git$ git status
# On branch master
nothing to commit (working directory clean)
git@srv-mon:/git.srv-mon/main.git$ git log
commit e9b4e672d00626b4ced0527ce78a486cf0f75d73
Author: git <git@srv-mon.polygon>
Date: Thu Jun 5 00:01:58 2014 +0400
cat /etc/passwd > example
commit f2c87acaa6b0e229e7647c5e15e37498e452af56
Author: git <git@srv-mon.polygon>
Date: Wed Jun 4 23:59:10 2014 +0400
Initial commit
отлично.
А давайте посмотрим что можно увидеть если обратиться к Web ориентированному представлению:
http://192.168.1.40/gitweb
Project: .git
кликаем на ссылку shortlog и также наблюдаем более так сказать наглядно, так удобнее чем посредством консоли.
Если внимательно посмотреть на выше представленный скриншот, то можно увидеть надпись «Unnamed repository; edit this file ‘description’ to name the repository» означающую, что описание данного репозитарий выводиться из файла description находящегося в папке с репозитарием, поправим его для наглядности:
git@srv-mon:/git.srv-mon/main.git$ nano .git/description
вместо
Unnamed repository; edit this file ‘description’ to name the repository.
Указываем
Это мое первое знакомство с репозитарием
Сохраняем внесенные изменения и обновляем окно браузера с открытой страницей содержащей URL web-ориентированного содержимого репозитария.
Скриншот демонстрирующи изменения приводить не буду, т. к. это излишне в данном случае — все и так работает.
Вывод: Задача данной заметки выполнена, в итоге я получил простой визуальный доступ к своим репозитариям внесенных измнений с целью простого веб ориентированного доступа онлайн. Соглашусь с самим собой, что так намного удобнее видеть все те изменения которые я проводил со своими проектами, не через консоль а наглядно. Что либо добавить еще в данную законченную заметку пока не вижу, поэтому буду прощаться с Вами читатели моего блога www.ekzorchik.ru – до встречи, с уважением автор блога – ekzorchik.
Отличная статья написано очень подробно
спасибо