23.06.2025

Как пользоваться Git? Краткое руководство

Совместная работа над проектом включает множество корпоративных инструментов и платформ. Для накопления знаний и документации – Wiki платформа, для управления рабочими процессами CRM, для управления и доступа к данным – базы данных и т.д. Однако важным компонентом, при работе с кодом, документацией, а так же файлами остается Git!

Что такое Git?

Git – это система контроля версий репозитория, которая представляет собой платформу для управления репозиториями хранимых на сервере. Используется в основном для распространения ПО для неопределенного круга лиц или же предоставления доступа для совместной работы команды над проектом. Для начала определимся с понятиями и сущностями, которые используются, при работе с Git:

Всю работу с репозиториями можно представить в виде схемы из трех сущностей:

Скриншот №1 — Схема работы Git

Работа пользователя начинается с инициализации репозитория в определенную папку командой:

git init /путь

После чего создаются три основные сущности для работы Git: Working Tree, Index, Repository. Папка, в которой создана директория .git считается Working Tree и именно в ней хранятся файлы. Все изменения внесенные в рабочую директорию регистрируются в Index командой:

git add /путь

Изменения Working Tree зарегистрировались, после чего можно сформировать Commit или же снимок рабочей директории, который направится в репозиторий.

git commit ./

На сейчас сформирован commit в виде объекта, который хранится в объектах. Далее мы можем направит в локальный репозиторий, по умолчанию командой:

git push origin master

Где origin-путь, а master-главная ветка. Либо переопределить путь origin на удаленный репозиторий и выполнить команду:

git remote add origin git@ip-адрес:/путь-к-репозиторию &&  git push origin master

После чего Commit будет отправлен в хранилище или же Repository, где на зарегистрирует commit под названием master. В дальнейшем, любой пользователь сможет скачать себе эту версию commit и использовать ее у себя локально. Реализуется командой:

git clone git@ip-адрес:/путь-к-репозиторию

А как это применить на практике? Поднимем свой Git-сервер!

Как быстро создать свой Git сервер?

Все действия были выполнены в среде облачного сервера от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:

Скриншот №2 — Создание сервера

Установим на машине пакет git через команду, для deb-подобных дистрибутивов:

apt install git

И отдельная команда для rpm-подобных версий, через менеджер пакетов yam/dnf:

yam install git

Скриншот №3 — Установка

Для аутентификации на сервере будет работать SSH под пользователем git и проводить авторизацию через ключи. Чтобы пользователь не мог выполнить вредоносные команды в обычную оболочку необходимо будет указать для него git-shell, через который можно выполнить только команды git. Для этого создадим пользователя git:

adduser git -c "Точка входа" -s $(which git-shell)

Скриншот №4 — Пользователи

Так как сервер SSH уже настроен на аутентификацию только по ключам, необходимо передать список открытых ключей пользователей в домашнюю директорию git.

mkdir /home/git/.ssh && ssh-keygen git

По правилам дискреционного доступа ключи будут наследовать права пользователя создателя и их необходимо изменить, как и директорию хранения:

mv /home/root/.ssh/git /home/git/.ssh/git \
mv /home/root/.ssh/git.pub /home/git/.ssh/git.pub \
cp /home/root/.ssh/authorized_keys /home/git/.ssh/authorized_keys

Теперь перейдем к клиенту и найдем его открытый ключ, а если его нет, то дополним командой ssh-keygen:

cat /home/ваш-пользователь/.ssh/id_rsa.pub

Скриншот №5 — SSH

Скопируйте отобразившийся ключ, он должен выглядеть следующим образом:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCjqQj9A+66iGuq3DYVXWTyHNBklggCdesWQqyIjLfo+aHirIfv5in7d2jFsv6w3HqBumi7PTyIVRsH50y5AWO4nxhE9RJykdKnZ9NAok6XoJk//nVmafIDpyFf5MxrqId02tyrdPT8kIJHPDM2uEANoIpRSvEYqaC39dN1MHK8208nPVxdJ2FV/PNBmBgDnG+Bl89THg6vHUaEfVfNVw5qz1rm7OZ8Z9Eksqv0ErSUq0vHDnJh24oTf9wh6iWDOEgFhVOWQjlLzN2cZn1yk4Ol2hxmZwUcrpjyLRg7n7/Djc1RKJPfxRqOftb8GY8ZICpWJSKOUPooVE9dMxFrgRcb0MQVtreGY2ZU8awcLhpKkvOz4MnwzdbmlUIGprCxdmfy0bQT6QpbKPWEBgee+6uGmVsnP6iJQnFRwNSQw3bxgnQue8l0r2IJ9LTzXVNkjaIJTu17QOsH+HSXcFlFok44PUEqSlaDL+QWyf4DZ8QIknzJ7eorgNxGjCmmqhtLrDc= root@df

Для защиты устройства от обращения к другим серверам – добавим в начало строки no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty и получим следующую запись и сразу запишем в авторизованные ключи. Не забудьте перейти обратно на сервер, ведь именно там мы вставляем ключ клиента:

echo "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCjqQj9A+66iGuq3DYVXWTyHNBklggCdesWQqyIjLfo+aHirIfv5in7d2jFsv6w3HqBumi7PTyIVRsH50y5AWO4nxhE9RJykdKnZ9NAok6XoJk//nVmafIDpyFf5MxrqId02tyrdPT8kIJHPDM2uEANoIpRSvEYqaC39dN1MHK8208nPVxdJ2FV/PNBmBgDnG+Bl89THg6vHUaEfVfNVw5qz1rm7OZ8Z9Eksqv0ErSUq0vHDnJh24oTf9wh6iWDOEgFhVOWQjlLzN2cZn1yk4Ol2hxmZwUcrpjyLRg7n7/Djc1RKJPfxRqOftb8GY8ZICpWJSKOUPooVE9dMxFrgRcb0MQVtreGY2ZU8awcLhpKkvOz4MnwzdbmlUIGprCxdmfy0bQT6QpbKPWEBgee+6uGmVsnP6iJQnFRwNSQw3bxgnQue8l0r2IJ9LTzXVNkjaIJTu17QOsH+HSXcFlFok44PUEqSlaDL+QWyf4DZ8QIknzJ7eorgNxGjCmmqhtLrDc= root@df" >> /home/git/.ssh/authorized_keys

И последний штрих, права доступа, запретим обращаться к ключам и выдадим права на файлы git:

chmod 700/home/git/.ssh/authorized_keys \
chown -hR git:git /home/git/

Репозиторий создадим одной командой! Или почти одной:

mkdir -p /srv/git/proj.git \
git init --bare /srv/git/proj.git

Скриншот №6 — Bare репозиторий

Отлично! Теперь репозиторий создан и можно начинать с ним работу, при учете условия того, что он типа bare. О разнице bare и non-bare, вы можете ознакомиться в нашем материале. Тип репозитория в данном случае позволяет обращаться к себе только через pull/push/fetch. Создадим репозиторий на клиенте командой:

git init /путь-к-папке-с-файлами \
git add . \
git commit \
git remote add origin git@ip-адрес-сервера:/srv/git/proj.git

Скриншот №7 — Инициализация репозитория

После чего репозиторий будет локально создан на клиенте, файлы зарегистрированы и commit с конечной точкой сервера прописан. И остается загрузить новые данные в репозиторий сервера:

git push origin main

Вуаля! Сервер поднят и работает, после чего остальные пользователи смогут загрузить существующий репозиторий командой:

Скриншот №8 — Клонирование репозитория

git clone git@ip-адрес-сервера:/srv/git/proj.git

Однако не забудьте предварительно прописать их открытые ключи в файле доверенных, как это сделано выше!