В этой главе мы увидим, как создать удаленный Git-репозиторий; отныне мы будем называть его Git Server. Нам нужен Git-сервер для совместной работы команды.
Создать нового пользователя
# add new group [root@CentOS ~]# groupadd dev # add new user [root@CentOS ~]# useradd -G devs -d /home/gituser -m -s /bin/bash gituser # change password [root@CentOS ~]# passwd gituser
Приведенная выше команда даст следующий результат.
Changing password for user gituser. New password: Retype new password: passwd: all authentication token updated successfully.
Создать голый репозиторий
Давайте инициализируем новый репозиторий с помощью команды init, за которой следует опция —bare . Инициализирует хранилище без рабочего каталога. По соглашению, пустой репозиторий должен называться .git .
[gituser@CentOS ~]$ pwd /home/gituser [gituser@CentOS ~]$ mkdir project.git [gituser@CentOS ~]$ cd project.git/ [gituser@CentOS project.git]$ ls [gituser@CentOS project.git]$ git --bare init Initialized empty Git repository in /home/gituser-m/project.git/ [gituser@CentOS project.git]$ ls branches config description HEAD hooks info objects refs
Генерация пары открытых / закрытых ключей RSA
Давайте пройдемся по процессу настройки Git-сервера, утилита ssh-keygen генерирует пару открытых / закрытых ключей RSA, которые мы будем использовать для аутентификации пользователей.
Откройте терминал и введите следующую команду и просто нажмите ввод для каждого входа. После успешного завершения он создаст каталог .ssh внутри домашнего каталога.
tom@CentOS ~]$ pwd /home/tom [tom@CentOS ~]$ ssh-keygen
Приведенная выше команда даст следующий результат.
Generating public/private rsa key pair. Enter file in which to save the key (/home/tom/.ssh/id_rsa): Press Enter Only Created directory '/home/tom/.ssh'. Enter passphrase (empty for no passphrase): ---------------> Press Enter Only Enter same passphrase again: ------------------------------> Press Enter Only Your identification has been saved in /home/tom/.ssh/id_rsa. Your public key has been saved in /home/tom/.ssh/id_rsa.pub. The key fingerprint is: df:93:8c:a1:b8:b7:67:69:3a:1f:65:e8:0e:e9:25:a1 tom@CentOS The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | . | | Soo | | o*B. | | E = *.= | | oo==. . | | ..+Oo | +-----------------+
ssh-keygen сгенерировал два ключа, первый из которых является закрытым (то есть id_rsa), а второй — открытым (то есть id_rsa.pub).
Примечание: никогда не делитесь своим ЧАСТНЫМ КЛЮЧОМ с другими.
Добавление ключей для авторизованного ключа
Предположим, что над проектом работают два разработчика, а именно Том и Джерри. Оба пользователя сгенерировали открытые ключи. Давайте посмотрим, как использовать эти ключи для аутентификации.
Том добавил свой открытый ключ на сервер с помощью команды ssh-copy-id, как показано ниже —
[tom@CentOS ~]$ pwd /home/tom [tom@CentOS ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
Приведенная выше команда даст следующий результат.
[email protected]'s password: Now try logging into the machine, with "ssh '[email protected]'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
Точно так же Джерри добавил свой открытый ключ на сервер с помощью команды ssh-copy-id.
[jerry@CentOS ~]$ pwd /home/jerry [jerry@CentOS ~]$ ssh-copy-id -i ~/.ssh/id_rsa [email protected]
Приведенная выше команда даст следующий результат.
[email protected]'s password: Now try logging into the machine, with "ssh '[email protected]'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
Push-изменения в хранилище
Мы создали пустой репозиторий на сервере и разрешили доступ двум пользователям. Отныне Том и Джерри могут вносить свои изменения в хранилище, добавляя его в качестве удаленного.
Команда Git init создает каталог .git для хранения метаданных о репозитории при каждом чтении конфигурации из файла .git / config .
Том создает новый каталог, добавляет файл README и фиксирует свое изменение в качестве начального коммита. После коммита он проверяет сообщение коммита, выполняя команду git log .
[tom@CentOS ~]$ pwd /home/tom [tom@CentOS ~]$ mkdir tom_repo [tom@CentOS ~]$ cd tom_repo/ [tom@CentOS tom_repo]$ git init Initialized empty Git repository in /home/tom/tom_repo/.git/ [tom@CentOS tom_repo]$ echo 'TODO: Add contents for README' > README [tom@CentOS tom_repo]$ git status -s ?? README [tom@CentOS tom_repo]$ git add . [tom@CentOS tom_repo]$ git status -s A README [tom@CentOS tom_repo]$ git commit -m 'Initial commit'
Приведенная выше команда даст следующий результат.
[master (root-commit) 19ae206] Initial commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 README
Том проверяет сообщение журнала, выполняя команду git log.
[tom@CentOS tom_repo]$ git log
Приведенная выше команда даст следующий результат.
commit 19ae20683fc460db7d127cf201a1429523b0e319 Author: Tom Cat <[email protected]> Date: Wed Sep 11 07:32:56 2013 +0530 Initial commit
Том совершил свои изменения в локальном хранилище. Теперь пришло время отправить изменения в удаленный репозиторий. Но перед этим мы должны добавить хранилище как удаленное, это разовая операция. После этого он может безопасно отправить изменения в удаленный репозиторий.
Примечание. По умолчанию Git отправляет только соответствующие ветки: для каждой ветви, существующей на локальной стороне, удаленная сторона обновляется, если там уже существует ветка с таким именем. В наших руководствах каждый раз, когда мы вносим изменения в основную ветку источника, используйте соответствующее имя ветви в соответствии с вашими требованиями.
[tom@CentOS tom_repo]$ git remote add origin [email protected]:project.git [tom@CentOS tom_repo]$ git push origin master
Приведенная выше команда даст следующий результат.
Counting objects: 3, done. Writing objects: 100% (3/3), 242 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To [email protected]:project.git * [new branch] master −> master
Теперь изменения успешно зафиксированы в удаленном хранилище.