Свій Git сервер
В цій статті я розповім як можна хостити свої git репозиторії без використання GitHub, GitLab та інших сторонніх сервісів. В тому числі SelfHosted рішень як ось GitTea, використовуючи виключно стандартний git клієнт.
Bare repository
Bare repository в Git — це репозиторій, який не містить робочої
копії файлів, а лише метадані та об’єкти, необхідні для зберігання
версій коду. Він зазвичай використовується як центральний
репозиторій для спільної роботи над проектом, оскільки дозволяє
кільком користувачам зберігати та отримувати зміни без конфліктів,
пов’язаних із локальними копіями. Bare repository не містить
директорії з робочими файлами. Щоб створити bare repository, можна
використати команду git init --bare
, що ініціалізує
новий репозиторій у вказаній директорії. Саме цей репозиторій
створюється на серверах всіляких хостингів по типу GitHub. І такий
же ми можемо використовувати самостійно.
Свій репозиторій
Для чого нам свій репозиторій? Як приклад його можна використовувати для розгортки свого додатку на одному або декількох серверів. При цьому без необхідності налаштовувати умовний GitHub, даючи всім нашим серверам доступ до нього. Також для роботи в команді над одним проектом. По суті все те саме, що і на умовному GitHub-і тільки наше.
Створити такий не важко. Скажімо ми вже маємо локальний репозиторій
з щойно написаним проектом, який ми хочемо зберегти на нашому
сервері, для подальшого використання. Для початку нам необхідно
обрати місце на сервері де ми будемо зберігати репозиторії. Зазвичай
їх зберігають за шляхом /srv/git/REPO_NAME.git/
. Суфікс
.git
в кінці необов’язковий, проте зазвичай його
використовують, ми це можемо побачити, для прикладу, на GitHub-і, де
посилання на репозиторій виглядає приблизно наступним чином
[email protected]:oven-sh/bun.git
.
Нехай наш проект називається cern-ibm5100
. Тоді для
його зберігання на нашому сервері нам необхідно зробити наступне:
- Створити bare репозиторій для проекту на сервері, виконавши
mkdir /srv/git/cern-ibm5100.git
cd /srv/git/cern-ibm5100.git
git init --bare
- Обрати користувача системи який буде власником цього репозиторію
для прикладу
supahacka
. Від іменні цього користувача ми будемо пушити та пулити оновлення з даного репозиторія
chown supahacka /srv/git/cern-imb5100
chmod 700
- З нашої локальної машини, де в нас знаходиться проект нам
необхідно додати
remote
з нашим сервером, де192.0.0.10
це IP нашого серверу
git remote add origin ssh://[email protected]/srv/git/cern-ibm5100.git
git push --set-upstream origin main
git push origin main
- До речі роботу з нашим сервером через SSH можна зробити зручніше
налаштувавши наш
~/.ssh/config
, додавши туди наступні рядки
Host cern
Hostname 192.0.0.10
User supahacka
Після чого ми можемо використовувати наступний запис
ssh://cern
замість
ssh://[email protected]
. Відповідно підключатися
до серверу ми зможемо виконавши ssh cern
, а додати
remote
через
git remote add origin ssh://cern/srv/git/cern-ibm5100.git
Використання репозиторія
Налаштувавши свій репозиторій, на сервері, ми можемо використовувати його так само як і звичайний репозиторій на GitHub. Для прикладу інший інженер може скопіювати його собі на машину виконавши
git clone ssh://cern/srv/git/cern-ibm5100.git
Звісно
якщо в нього є ssh доступ до нашого серверу і теки
/srv/git/cern-ibm5100.git
відповідно.
Локально на сервері ми можемо клонувати наш репозиторій (для прикладу для розгортки додатку) використовуючи звичайний шлях до теки
git clone /srv/git/cern-ibm5100
А керувати доступом до репозиторія ми можемо за допомогою стандартних прав доступу до файлової системи в Linux, використовуючи групи користувачів.