Git
Chapters ▾ 2nd Edition

4.2 Git на сервері - Отримання Git на сервері

Отримання Git на сервері

Тепер ми розглянемо налаштування сервісу Git з цими протоколами на вашому власному сервері.

Note

Тут ми продемонструємо команди та кроки, що потрібні для базового, спрощеного встановлення на Linux сервері, хоча ці сервіси також можуть працювати під Mac або Windows серверами. Насправді налаштування виробничого серверу у вашій інфраструктурі безперечно буде накладати відмінності у міри безпеки чи в роботі з системними утилітами, проте сподіваємось, що ця секція дасть вам загальне уявлення про процес.

Щоб налаштувати сервер Git, спочатку треба експортувати існуюче сховище до нового чистого сховища — сховища, що не містить робочої теки. Це доволі просто зробити. Щоб зробити клон вашого сховища та створити нове чисте сховище, треба виконати команду clone з опцією --bare. За умовною домовленістю, теки чистих сховищ закінчуються суфіксом .git, наприклад:

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

Тепер у вас є копія даних теки Git у теці my_project.git.

Це майже рівнозначно виконанню

$ cp -Rf my_project/.git my_project.git

Є декілька незначних відмінностей у файлі конфігурації, проте для наших цілей, це майже одне й те саме. Ми беремо саме сховище Git, без робочої теки, та створюємо теку спеціально і тільки для нього.

Розміщення чистого сховища на сервер

Тепер, коли у вас є чиста копія вашого сховища, все, що вам потрібно зробити — це розмістити його на сервері та налаштувати протоколи. Припустімо, ви налаштували сервер за назвою git.example.com, до якого у вас є SSH доступ, та ви бажаєте зберігати усі ваші сховища Git під текою /srv/git. Якщо тека /srv/git вже існує на сервері, ви можете налаштувати своє нове сховище, просто копіюванням вашого чистого сховища:

$ scp -r my_project.git user@git.example.com:/srv/git

Наразі інші користувачі, що мають SSH доступ на читання теки /srv/git на цьому сервері, можуть зробити клон вашого сховища, виконавши

$ git clone user@git.example.com:/srv/git/my_project.git

Якщо користувач зайде через SSH до серверу та має доступ на запис до теки /srv/git/my_project.git, він автоматично матиме право викладати зміни.

Git автоматично додасть групові права на запис до сховища вірно, якщо ви виконаєте команду git init з опцією --shared.

$ ssh user@git.example.com
$ cd /srv/git/my_project.git
$ git init --bare --shared

Бачите як просто взяти сховище Git, створити його чисту версію, та розмістити її на сервері, до якого ви та ваші колеги мають SSH доступ. Тепер ви готові до співпраці над одним проектом.

Важливо зазначити, що це літерально все, що вам потрібно щоб отримати працюючий корисний Git сервер, до якого мають доступ декілька людей — просто додайте SSH акаунти на сервері, та закиньте кудись чисте сховище, до якого всі користувачі мають доступ на читання та запис. Ось і все — більше нічого не треба.

У декількох наступних секціях, ви побачите як перейти до більш витончених схем. Ми розглянемо як не створювати акаунти для кожного користувача, як додати відкритий доступ на читання сховища, налаштування веб інтерфейсу та інше. Втім, пам’ятайте, що для співпраці з декількома людьми над закритим проектом, усе що треба — це SSH сервер і чисте сховище.

Маленькі проекти

Якщо ви маленька контора, або ви просто випробовуєте Git у вашій організації, та маєте тільки кількох програмістів, усе дуже просто. Один з найскладніших аспектів налаштування серверу Git — керування користувачами. Якщо ви бажаєте, щоб якісь сховища були доступні на читання деяким користувачам, а на читання та запис іншим, налаштувати доступ та права може бути трохи складніше.

SSH доступ

Якщо у вас є сервер, до якого всі ваші програмісти вже мають SSH доступ, зазвичай найпростіше встановити ваше перше сховище там, адже вам майже нічого не доведеться робити (як ми побачимо у наступній секцій). Якщо вам потрібен складніший контроль над доступом та правами до вашого сховища, ви можете з ними впоратися за допомогою звичайних прав доступу до файлів операційної системи вашого серверу.

Якщо ви бажаєте розмістити ваші сховища на сервері, до якого не у всіх з вашої команди, у кого має бути доступ на запис, є акаунти, вам треба налаштувати SSH доступ для них. Ми далі припускаємо, що на вашому сервері SSH сервер вже є встановленим, та ви саме так заходите на сервер.

Є декілька способів надати доступ усій вашій команді. Ви можете просто додати акаунти всім, що є найпростішим варіантом, проте може бути трудомістким варіантом. Ви можете не захотіти виконувати adduser та встановлювати тимчасові паролі для кожного користувача.

Другий метод — це створити єдиного користувача git, попросити кожного користувача, у котрого має бути доступ на запис відправити вам публічний ключ SSH, та додати всі ключі до файлу ~/.ssh/authorized_keys вашого нового користувача git. Після цього, усі будуть мати доступ до машини через користувача git. Це ніяким чином не впливає на дані коміту — користувач SSH, з якого ви підключаєтесь, не впливає на коміти, що ви записуєте.

Інший спосіб — це зробити, щоб SSH сервер авторизувався з LDAP серверу чи іншого централізованого джерела авторизації, що у вас може бути вже встановленим. Доки кожен користувач має доступ до командного рядка на машині, будь-якої автонтефікації SSH буде достатньо.