-
1. Вступ
- 1.1 Про систему контролю версій
- 1.2 Коротка історія Git
- 1.3 Основи Git
- 1.4 Git, зазвичай, тільки додає дані
- 1.5 Три стани
- 1.6 Командний рядок
- 1.7 Інсталяція Git
- 1.8 Початкове налаштування Git
- 1.9 Отримання допомоги
- 1.10 Підсумок
-
2. Основи Git
- 2.1 Створення Git-репозиторія
- 2.2 Запис змін до репозиторія
- 2.3 Перегляд історії комітів
- 2.4 Скасування речей
- 2.5 Взаємодія з віддаленими сховищами
- 2.6 Теґування
- 2.7 Псевдоніми Git
- 2.8 Підсумок
-
3. Галуження в git
- 3.1 Гілки у кількох словах
- 3.2 Основи галуження та зливання
- 3.3 Управління гілками
- 3.4 Процеси роботи з гілками
- 3.5 Віддалені гілки
- 3.6 Перебазовування
- 3.7 Підсумок
-
4. Git на сервері
- 4.1 Протоколи
- 4.2 Отримання Git на сервері
- 4.3 Генерація вашого публічного ключа SSH
- 4.4 Налаштування Серверу
- 4.5 Демон Git
- 4.6 Розумний HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Варіанти стороннього хостингу
- 4.10 Підсумок
-
5. Розподілений Git
-
6. GitHub
-
7. Інструменти Git
- 7.1 Вибір ревізій
- 7.2 Інтерактивне індексування
- 7.3 Ховання та чищення
- 7.4 Підписання праці
- 7.5 Пошук
- 7.6 Переписування історії
- 7.7 Усвідомлення скидання (reset)
- 7.8 Складне злиття
- 7.9 Rerere
- 7.10 Зневадження з Git
- 7.11 Підмодулі
- 7.12 Пакування
- 7.13 Заміна
- 7.14 Збереження посвідчення (credential)
- 7.15 Підсумок
-
8. Налаштування Git
-
9. Git and Other Systems
- 9.1 Git як клієнт
- 9.2 Міграція на Git
- 9.3 Підсумок
-
10. Git зсередини
- 10.1 Кухонні та парадні команди
- 10.2 Об’єкти Git
- 10.3 Посилання Git
- 10.4 Файли пакунки
- 10.5 Специфікація посилань (refspec)
- 10.6 Протоколи передачі
- 10.7 Супроводження та відновлення даних
- 10.8 Змінні середовища
- 10.9 Підсумок
-
A1. Додаток A: Git в інших середовищах
- A1.1 Графічні інтерфейси
- A1.2 Git у Visual Studio
- A1.3 Git в Eclipse
- A1.4 Git у Bash
- A1.5 Git у Zsh
- A1.6 Git у Powershell
- A1.7 Підсумок
-
A2. Додаток B: Вбудовування Git у ваші застосунки
- A2.1 Git з командного рядка
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
-
A3. Додаток C: Команди Git
- A3.1 Налаштування та конфігурація
- A3.2 Отримання та створення проектів
- A3.3 Базове збереження відбитків
- A3.4 Галуження та зливання
- A3.5 Поширення й оновлення проектів
- A3.6 Огляд та порівняння
- A3.7 Зневаджування
- A3.8 Латання (patching)
- A3.9 Електронна пошта
- A3.10 Зовнішні системи
- A3.11 Адміністрування
- A3.12 Кухонні команди
4.4 Git на сервері - Налаштування Серверу
Налаштування Серверу
Розглянемо покрокове налаштування SSH доступу на сервері.
У цьому прикладі, ми використаємо метод авторизованих ключів (authorized_keys
) для авторизації ваших користувачів.
Ми знову припустимо, що на вашому сервері стандартний дистрибутив Лінукс, наприклад Ubuntu.
Зауваження
|
Чимало з того, що тут описано, може бути автоматизовано за допомогою команди |
Спершу, створимо користувача git
та теку .ssh
для цього користувача.
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
Далі, треба додати публічні SSH ключі якогось програміста до файлу authorized_keys
користувача git
.
Припустимо, що у вас є перевірені публічні ключі та ви їх зберегли до тимчасових файлів.
Нагадаємо, публічні ключі виглядають схоже на:
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
Ви просто долучаєте їх до файлу authorized_keys
користувача git
в його теці .ssh
:
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
Тепер ви можете налаштувати порожнє сховище для них за допомогою git init
з опцією --bare
, яка створює сховище без робочої теки:
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
Після цього, Джон, Джосі та Джесіка можуть викласти першу версію свого проекту до того сховища, якщо додадуть його як віддалене сховище та викладуть до нього гілку.
Завважте що хтось має заходити до машини та створювати чисте сховище щоразу, коли ви хочете додати проект.
Використаймо gitserver
як ім’я хосту (hostname
) серверу, на якоми ви налаштували користувача git
та сховище.
Якщо ви ваш сервер працює у внутрішній мережі, та ви налаштуєте DNS щоб ім’я gitserver
вказувало на ваш сервер, то ви можете використовувати команди як і раніше (припустимо, що myproject
це існуючий проект з файлами):
# на машині Джона
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
Після цього, усі інші можуть зробити клон цього сховища, та викладати зміни назад так само легко:
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master
За допомогою цього метода, ви можете швидко отримати працюючий сервер Git з доступом на читання та запис для декількох програмістів.
Зауважте, що наразі усі ці користувачі також можуть заходити на сервер та отримують доступ до оболонки (shell) як користувач git
.
Якщо ви не хочете цього дозволяти, вам треба змінити програму оболонки на щось інше у файлі passwd
.
Ви легко можете обмежити користувача git
до виключно активності Git за допомогою утиліти git-shell
, що входить до поставки Git.
Якщо ви вкажете її для вашого користувача git
, як програму, що запускається при вході, то користувач git
не зможе здобути нормальний доступ до вашого серверу.
Щоб цим скористатись, задайте git-shell
замість bash чи csh як оболонку при вході для вашого користувача.
Щоб це зробити, треба спочатку додати git-shell
до /etc/shells
, якщо його там ще нема:
$ cat /etc/shells # перевірте, може `git-shell` вже є у файлі. Якщо ні...
$ which git-shell # переконайтесь, що git-shell присутній на вашій системі.
$ sudo vim /etc/shells # та додайте шлях до git-shell за допомогою останньої команди
Тепер ви можете відредагувати оболонку для користувача за допомогою chsh <ім'я користувача> -s <оболонка (shell)>
:
$ sudo chsh git -s $(which git-shell)
Тепер користувач git
може використовувати з’єднання SSH виключно щоб викладати та забирати сховища Git, та не може зайти до машини.
Якщо ви спробуєте, ви побачите відмову від входу, схожу на:
$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
Тепер мережеві команди Git продовжать працювати без проблем, проте користувачі не зможуть отримати оболонку.
Як і стверджує вивід, ви тепер можете створити теку в домашній теці користувача git
, що трохи змінити поведінку команду git-shell
Наприклад, ви можете обмежити команди Git, які прийме сервер, або ви можете змінити повідомлення, яке бачать користувачі, якщо вони спробують зайти через SSH.
Виконайте git help shell
для докладнішої інформації про це.