ХостингСоздаем Git-репозиторий на Locum.ru

Использование системы контроля версий для управления кодом собственного проекта — прекрасное и рациональное решение, успешно применяемое тысячами команд разработчиков по всему миру.

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

В случае использования распределённой системы контроля версий Git и виртуального хостинга Locum, этот вопрос можно решить буквально одним движением руки, не прибегая к использованию дорогостоящих тарифных планов GitHub или Assembla.

Итак, допустим, что у нас есть некоторый проект, репозиторий которого можно сохранить на хостинге Locum, и пусть он находится в каталоге meet.git.

Для начала узнаем название вашего сервера виртуального хостинга. Эту информацию вы можете посмотреть в нашей клиентской панели: вкладка «Услуги» → раздел «FTP и SSH».

Зайдём на сервер виртуального хостинга через SSH и подготовим окружение для работы Git.

% ssh hosting_ПОЛЬЗОВАТЕЛЬ@ВАШ_СЕРВЕР.locum.ru
% mkdir -p ~/git/meet.git
% cd ~/git/meet.git
% git init --bare

Команда git init с ключом --bare создаст репозиторий в текущем каталоге, обеспечивая хранение исключительно служебной информации и блоков данных. При этом напрямую работать с сохранёнными файлами и каталогами будет невозможно: все данные проекта хранятся во внутреннем представлении Git.

Работа с репозиторием будет проводиться поверх протокола SSH, поэтому лучше избавиться от постоянного требования ввода пароля, добавив свой публичный SSH-ключ в список авторизованных ключей на сервере: достаточно просто скопировать ваш публичный SSH-ключ в конец файла ~/.ssh/authorized_keys, а если такого файла не существует, то достаточно будет просто создать его.

На самом деле, всё это можно легко автоматизировать. Выполните данную команду на вашем локальном компьютере:

% cat ~/.ssh/id_rsa.pub | ssh hosting_ПОЛЬЗОВАТЕЛЬ@ВАШ_СЕРВЕР.locum.ru 'cat >> ~/.ssh/authorized_keys' 

На всякий случай, стоит удостовериться, что директория .ssh и список авторизованных ключей закрыты для чтения остальными пользователями. Это требование продиктовано реализацией OpenSSH и здравым смыслом. Для этого достаточно выполнить команду на нашем сервере:

% ssh hosting_ПОЛЬЗОВАТЕЛЬ@ВАШ_СЕРВЕР.locum.ru 'chmod 0700 ~/.ssh' 

Отлично, теперь работа с нашими серверами при помощи SSH станет гораздо проще и комфортнее, без какого-либо ущерба безопасности. Главное — мы выполнили все приготовления для функционирования Git.

Создадим в директории вашего проекта на локальном компьютере Git-репозиторий:

% cd meet.git
% git init 

Добавим в учёт все файлы вашего проекта:

% git add . 

Пока не поздно, можно сделать ревизию состояния всех файлов:

% git status 

Необходимо принять изменения (выполнить commit). Каждое множество изменений обязано сопровождаться хотя бы кратким описанием. Поскольку это наш первый коммит, то описание будет соответствующим:

% git commit -m 'initial commit' 

Отлично, теперь на вашем локальном компьютере выполняется полноценный контроль версий. С этого момента вы сможете отслеживать любые изменения в коде вашего проекта, что позволяет значительно облегчить процесс разработки и, в особенности, отладки.

Для того, чтобы Git обеспечил согласование вашего локального репозитория с его братом-близнецом на сервере Locum, нужно определить точку синхронизации. Это не является обязательным пунктом, ведь оба репозитория являются полноценными, и возможность согласования — всего лишь приятная возможность. В системе Git точки синхронизации называются remotes и являются именованными. Как правило, единственная точка синхронизации носит гордое имя origin.

% git remote add origin ssh://hosting_ПОЛЬЗОВАТЕЛЬ@ВАШ_СЕРВЕР.locum.ru/home/hosting_ПОЛЬЗОВАТЕЛЬ/git/meet.git 

Теперь попробуем впервые отправить наши данные на сервер. В терминологии Git это зовётся push. При этом необходимо указать целевую точку синхронизации и название ветке, в которую публикуются изменения. По-умолчанию все данные в Git лежат в ветке master.

% git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 211 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://hosting_ПОЛЬЗОВАТЕЛЬ@ВАШ_СЕРВЕР.locum.ru/home/hosting_ПОЛЬЗОВАТЕЛЬ/git/meet.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin. 

Команда push вызвана с ключом -u, который заставляет Git запомнить, что вы предпочитаете делать push и обратный ему процесс pull в ветке master точки синхронизации origin. С этого момента никаких дополнительных параметров для команд git push и git pull вам не понадобится.

Кстати, если после выполнения последней команды вы увидели аналогичный результат в вашем терминале, то Git функционирует корректно. Для того, чтобы это проверить, попробуем выполнить клонирование (скачивание) новоиспечённого репозитария. Попробуйте выполнить эту команду, находясь в какой-либо директории, не содержащей каталог meet-git:

% git clone 'ssh://hosting_ПОЛЬЗОВАТЕЛЬ@ВАШ_СЕРВЕР.locum.ru/home/hosting_ПОЛЬЗОВАТЕЛЬ/git/meet.git'
Cloning into meet-git...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done. 

Удалось? Поздравляем, у вас теперь есть собственный приватный Git-репозиторий, в котором вы можете самостоятельно заниматься разработкой вашего проекта, не беспокоясь о сохранности исходного кода. Удачи!

Для дальнейшего чтения мы можем посоветовать русскоязычный перевод книги Pro Git.

P.S. Кстати, если вам нужно подключить к репозиторию своих сотрудников, то просто пропишите их публичные SSH-ключи в конец списка авторизованных ключей (см. выше) и попросите выполнить git clone с известным вам адресом.

  1. К постскриптуму вопрос — если я добавлю ключи сотрудников — они также получат полный доступ по SSH ко всему хостингу?

  2. admin:

    Михаил, да сотрудники получат полный доступ ко всем файлам и каталогам.

  3. Sergey:

    git clone ‘ssh://hosting_ПОЛЬЗОВАТЕЛЬ@ВАШ_СЕРВЕР.locum.ru/home/hosting_ПОЛЬЗОВАТЕЛЬ/meet.git’

    Пропущена перед meet.git, Директория git

  4. admin:

    Сергей, спасибо, исправили ошибку.

  5. Иль:

    ось — Win7. Вместе с гитом, был установлен ssh клиент. Получал приватный и публичный ключ. Так как ~/.ssh/authorized_keys не был обнаружен, создал папку .ssh на сервере, засунул туда id_rsa.pub и переименовал в authorized_keys. На своей машине выполняю ssh hosting_ПОЛЬЗОВАТЕЛЬ@ВАШ_СЕРВЕР.locum.ru, но для авторизации все равно требует пароль.

  6. Иль:

    а теперь сам вопрос: это нормально?)

  7. ormus:

    Чтобы не требовал пароль для авторизации, попробуйте прописать созданную Вами папку .ssh на сервере в переменную окружения PATH