Git - создание операции
В этой главе мы увидим, как создать удаленный репозиторий 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 Public / Private 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).
Note: Никогда не делитесь своим ЧАСТНЫМ КЛЮЧОМ с другими.
Добавление ключей в authorized_keys
Предположим, что над проектом работают два разработчика, а именно Том и Джерри. Оба пользователя сгенерировали открытые ключи. Давайте посмотрим, как использовать эти ключи для аутентификации.
Том добавил свой открытый ключ на сервер, используя 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.
Отправить изменения в репозиторий
Мы создали чистый репозиторий на сервере и разрешили доступ двум пользователям. С этого момента Том и Джерри могут отправлять свои изменения в репозиторий, добавляя его как удаленный.
Команда 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
Том зафиксировал свои изменения в локальном репозитории. Теперь пришло время отправить изменения в удаленный репозиторий. Но перед этим надо добавить репозиторий как пульт, это разовая операция. После этого он может безопасно отправить изменения в удаленный репозиторий.
Note- По умолчанию Git отправляет только соответствующие ветки: для каждой ветки, которая существует на локальной стороне, удаленная сторона обновляется, если ветка с таким же именем уже существует там. В наших руководствах каждый раз, когда мы вносим изменения вorigin master ветвь, используйте соответствующее имя ветки в соответствии с вашими требованиями.
[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
Теперь изменения успешно зафиксированы в удаленном репозитории.