Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
git_i_tolko_ssh [2025/03/06 11:54] (текущий) darkfire
Строка 1: Строка 1:
 +====== Git и SSH — простое решение для локальной и совместной разработки ======
 +~~Title: Git с SSH — локальные репозитории для себя, удаленные для команды ~~
 +{{htmlmetatags>
 +metatag-description=(Подробное руководство по настройке Git-сервера с использованием только SSH: создание голого репозитория, управление пользователями и ограничение доступа через git-shell. Узнайте, как организовать совместную работу над закрытыми проектами без сложных систем управления репозиториями.)
 +}}
 +
 +Чтобы работать с [[Git|Git]] сервером необязательно использовать Gitosis или Gitolite. Для работы Git по протоколу [[SSH|SSH]] достаточно установленного демона SSH. В этом случае неудобство проявляется в том, что для каждого нового пользователя GIT сервера нужно заводить системного пользователя ОС и права на чтение/запись этих пользователей совпадают с правами на файлы репозитория (чтобы сделать push пользователь должен обладать правами на запись). Чтобы получить рабочий Git- сервер, к которому несколько человек имеют доступ ― просто добавьте учетные записи SSH на сервер, и положите голый репозиторий в место, к которому эти пользователи имеют доступ на чтение и запись. И всё.
 +
 +<panel type="default">Для совместной работы пары человек на закрытом проекте, всё, что вам нужно ― это [[SSH|SSH]]- сервер и "голый" репозиторий.</panel>
 +===== Пример установки связки Git и SSH =====
 +
 +Все репозитории будут храниться в директории /home/gitsrv для которой разрешен полный доступ для всех. Пустой репозиторий создается с ключем --bare. Для того чтобы приступить к установке любого сервера Git, вы должны экспортировать существующий репозиторий в новый «голый» репозиторий, т.е. репозиторий без рабочего каталога. Обычно это несложно сделать. Чтобы склонировать ваш репозиторий и создать новый «голый» репозиторий, выполните команду clone с параметром —bare. По существующему соглашению, каталоги с голыми репозиториями заканчиваются на .git.
 +  * Установим сам git
 +<file bash>
 +apt install git
 +</file>
 +  * Создадим на сервере пользователя git с домашней директорией /home/gitsrv<file>
 +# useradd git -d /home/gitsrv -m
 +</file>Создаем пустой репозиторий empty в директории empty.git<file>
 +$ mkdir /home/gitsrv/empty.git
 +$ cd /home/gitsrv/empty.git
 +$ git --bare init
 +Initialized empty Git repository in /opt/gitsrv/empty.git/
 +</file>
 +  * На клиенте<file>
 +git clone git@your.server.git:/home/gitsrv/empty.git
 +$ touch README
 +$ git add .
 +git commit -am "First initial commit."
 +git push origin master
 +</file>
 +  * **Всё!!!** Может понадобиться задать права (444) на файлы и директории(775) в репозиториях<file bash>
 +chown -R git:git /home/gitsrv/;
 +find /home/gitsrv -type f -exec chmod 444 {} \;
 +find /home/gitsrv -type d -exec chmod 775 {} \;
 +</file>
 +  * Дополнительно на сервере. В качестве дополнительной меры предосторожности можно ограничить возможности пользователя git только действиями связанными с Git с помощью ограниченной оболочки git-shell поставляемой вместе с Git. Для этого нужно заменить интерпретатор команд пользователя на git-shell.<file>
 +$ which git-shell 
 +/usr/bin/git-shell
 +# nano /etc/passwd
 +git:x:1002:1002:git version control:/home/gitsrv/:/usr/bin/git-shell
 +</file>Копируем файлы с разрешенными командами, из всего две list и help.<file>
 +# cp -R /usr/share/doc/git/contrib/git-shell-commands /home/gitsrv
 +# chmod +x git-shell-commands/help
 +# chmod +x git-shell-commands/list
 +</file>
 +
 +===== Использование GIT в локальном репозитории =====
 +
 +[[git|GIT]] и локальный репозиторий использование без загрузки на git сервер. Иногда при правке файлов мне нужно сохранить просто истории изменений и откатиться в случае ошибки. Загружать на удаленый сервер изменения мне не нужно.
 +
 +Создадим локальный репозиторий в папке с проектом. Эта команда создает новый локальный Git-репозиторий в текущем каталоге проекта. Теперь Git готов отслеживать изменения в вашем коде.
 +<file bash>
 +git init
 +</file>
 +Для того, чтобы добавить все файлы из текущей директории и всех поддиректорий введите:<file bash>
 +git add -A
 +или так
 +git add .
 +</file>
 +Или добавить 1 файл с именем filename. Эта команда добавляет конкретный файл к индексу (staging area), подготавливая его к комиту.
 +<file bash>
 +git add filename
 +</file>
 +Для просмотра текущего состояния можно воспользоваться командой:<file bash>
 +git status
 +</file>
 +После добавления файлов проекта, с помощью команды создаем версию проекта. Коммит - фиксация изменений.
 +<file bash>
 +git commit -am "First!"
 +</file>
 +Просмотреть коммиты можно при помощи команды:<file bash>
 +git log
 +</file>
 +
 +Простого всем редактирования файлов!!! Дополнительно [[git#nastrojka_ignorirovanija_fajlov_direktorij_gitignore|Настройка .gitignore]].
 +
  

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!