Thank you for reading this post, don't forget to subscribe!
Git – это распределенная система контроля версий с открытым исходным кодом. Эта система позволяет без труда выполнять ветвление и слияние, а также дает возможность управлять несколькими удаленными репозиториями одного проекта и вести его распределенную разработку.
Установка Git с помощью Yum
Как и большинство дистрибутивов Linux, CentOS позволяет скачать git из своего репозитория по умолчанию. Чтобы установить последнюю в репозитории версию пакета введите:
yum install git
Введите «y», чтобы подтвердить установку. Затем система git будет установлена на сервер и готова к работе.
Установка Git из исходного кода
Чтобы получить последнюю доступную версию Git, лучше скачать и скомпилировать данную систему из исходного кода.
На момент написания статьи последней доступной в репозитории CentOS версией git является 1.7.1,
Итак, сначала нужно скачать инструменты компиляции для CentOS (Development Tools) с помощью следующей команды:
yum groupinstall "Development Tools"
Это позволит установить инструменты и компиляторы, необходимые для преобразования исходного кода в исполняемые файлы.
Завершив установку инструментов компиляции, нужно установить зависимости git, без которых систему не получится установить или запустить.
yum install zlib-devel perl-ExtUtils-MakeMaker asciidoc xmlto openssl-devel
Когда все вышеперечисленные зависимости установлены, можно приступать к загрузке последней версии исходного кода, которая размещена на github.com:
cd ~
wget -O git.zip https://github.com/git/git/archive/master.zip
Распакуйте архив и перейдите в каталог проекта:
unzip git.zip
cd git-master
Теперь можно собрать исполняемые файлы и документацию, а затем установить git при помощи следующего набора команд:
make configure
./configure --prefix=/usr/local
make all doc
sudo make install install-doc install-html
Обратите внимание: обновить систему git можно при помощи самой git. Когда появится необходимость обновить git, клонируйте git-репозиторий с сайта github в новый каталог, а затем соберите и установите новую версию ( как показано выше):
git clone git://github.com/git/git
Настройка Git
При коммите изменений Git указывает имя пользователя и адрес электронной почты в сообщении о коммите; это делается для того, чтобы легко отслеживать изменения.
Если не внести эту информацию в настройки, Git попробует угадать ее (и, конечно, может ошибиться), основываясь на имени пользователя Linux и имени хоста.
Потому рекомендуется предоставить системе Git все эти данные; Для этого используйте следующие команды:
git config --global user.name "Your Name Here"
git config --global user.email "your_email@example.com"
Изменения настроек будут храниться в файле, который находится в домашнем каталоге. Чтобы просмотреть этот файл, используйте простой текстовый редактор:
nano ~/.gitconfig
[user]
name = Your Name Here
email = your_email@example.com
Редактор по умолчанию:
git config --global core.editor nano
И утилиту сравнения:
git config --global merge.tool vimdiff
Кроме того, эту информацию можно просмотреть, запросив у git текущие настройки конфигурации:
git config --list
user.name=Your Name Here
user.email=your_email@example.com
Создание рабочего пространства
На данном этапе нужно позаботиться о чистом рабочем пространстве (workspace) для кодирования, особенно если код будет разрабатываться для нескольких проектов сразу. Рекомендуется создать отдельную папку по имени git в домашнем каталоге, который содержит подкаталоги для каждого проекта.
Итак, для начала нужно создать рабочее пространство.
mkdir -p ~/git/testing ; cd ~/git/testing
Данная команда выполняет два действия:
- создает в домашнем каталоге каталог по имени git и подкаталог testing (здесь будет храниться проект);
- переходит в базовый каталог проекта.
В базовом каталоге нужно создать несколько файлов для проекта. На этом этапе можно либо следовать руководству и создать несколько фиктивных файлов для тестирования, либо создать файлы/каталоги, которые позже станут частью реального проекта.
Чтобы создать тестовый файл для репозитория:
touch file
Создав в рабочем пространстве все необходимые файлы, попробуйте отследить файлы при помощи git. Как это сделать, покажет следующий раздел.
Конвертирование существующего проекта
Когда все нужные файлы находятся в рабочем пространстве git, нужно сказать git использовать текущий каталог как среду git.
Команда git init
создаёт новый репозиторий. Её можно использовать для превращения уже существующего проекта в Git-репозиторий – или для создания нового. Большинство других команд Git не смогут работать вне проинициализированного репозитория, поэтому как правило – это первая команда при запуске нового проекта.
Выполнение команды git init
создаёт каталог .git
в корне проекта, который будет содержать все необходимые метаданные для репозитория. Сам каталог проекта остаётся без изменений (в отличии от SVN – Git не создаёт каталог .git
в каждой вложенной дириектории проекта).
user@host ~/git/testing $ git init
Initialized empty Git repository in /home/user/git/testing/.git/
Создав новый пустой репозиторий, добавьте в него нужные файлы и каталоги.
Для этого используйте следующую строку:
user@host ~/git/testing $ git add .
В данном случае не должно появиться никакого вывода (к сожалению, Git не всегда сообщает о правильной работе компонентов).
Всякий раз, когда в репозитории добавляются новые или изменяются уже существующие файлы, нужно создавать сообщение к коммитам (или commit message).
git init --bare <directory> |
Инициализирует пустой репозиторий Git, но без рабочего каталога. Общие репозитории всегда должны создаваться с флагом --bare
(ниже мы рассмотрим этот момент). Общепринято, что имена каталогов репозиториев, проиницилизированных с --bare
заканчиваются на .git
. Например, неизолированный (bare) репозиторий с именем my-project
должен храниться в каталоге с именем my-project.git
.
Создание сообщений коммита
Сообщение коммита, или сообщение о коммите (commit message) – это короткое сообщение, объясняющее внесенные изменения. Такие сообщения необходимо создавать перед отправкой изменений кодирования (который называется push); это отличный способ объяснить остальным разработчикам проекта, что именно было изменено в коде и чего от этих изменений ожидать.
Сообщения коммитов, как правило, достаточно короткие (в пределах 1-2 предложений) и должны излагать внесенные поправки. Рекомендуется создавать сообщение о каждом внесенном изменении, прежде чем передать код. Можно передавать столько сообщений о коммитах, сколько нужно. Единственное требование для любого коммита: он должен включать в себя, по крайней мере, один файл и сообщение. Передача данных (или push) должна иметь как минимум один коммит.
Продолжая работу с приведенным ранее примером, создайте сообщение для коммита:
user@host ~/git/testing $ git commit -m "Initial Commit" -a
[master (root-commit) 1b830f8] initial commit
0 files changed
create mode 100644 file
Вышеприведенная команда содержит два важных параметра. Первый – это параметр –m, который позволяет набрать комментарий к коммиту (в данном случае Initial Commit). Второй – это параметр –а, который означает, что данное сообщение о коммите нужно применить ко всем добавленным или измененным файлам. Для первого коммита это приемлемо; в целом же, рекомендуется указывать определенные файлы или каталоги для каждого коммита.
Также можно выполнить:
user@host ~/git/testing $ git commit -m "Initial Commit" file
Чтобы указать определенный файл коммита. Чтобы указать дополнительные файлы или каталоги, внесите в конец этой команды список нужных файлов, разделенный пробелами.
Передача изменений на удаленный сервер
До этого момента все действия выполнялись на локальном сервере. Для простоты отслеживания версий файлов Git рекомендуется использовать локально. Тем не менее, работая в команде разработчиков, нужно предавать (или толкать) внесенные в код изменения на удаленный сервер. Об этом и пойдет речь в этом разделе.
Первое, что нужно для передачи кода на удаленный сервер — предоставить URL репозитория и назвать его.
Создаём аккаунт github
https://github.com/
авторизовываемся, далее Your profile -> Repositories -> new
после создания репозитория получаем ссылку вида:
git@github.com:midnight47/test2.git
Для корректной работы должны быть созданы ssh ключи публичный и приватный(создаём под пользователем который будет работать)
1 |
<span class="command">ssh-keygen -t rsa -b 4096</span> |
1 |
<span class="command">ssh-add ~/.ssh/id_rsa</span> |
далее добавляем публичный ключ в ваш github аккаунт:
Settings - SSH and GPG keys - New ssh key
задаём имя и добавляем ключ ~/.ssh/id_rsa.pub
на этом всё.
Чтобы настроить удаленный репозиторий и просмотреть список всех таких репозиториев (если их более одного), введите следующую команду:
git remote add test2 git@github.com:midnight47/test2.git
[midnight47@centos6 testg]$ git remote -v
test2 git@github.com:midnight47/test2.git (fetch)
test2 git@github.com:midnight47/test2.git (push)
Первая команда добавляет удаленный репозиторий по имени test2 и указывает URL ssh://git@github.com:midnight47/test2.git.
Конечно, можно указать любое имя для удаленного репозитория, но URL должен указывать на действительный репозиторий. К примеру, чтобы толкнуть код на GitHub, нужно использовать URL репозитория, предоставленный проектом.
Когда удаленный репозиторий настроен, можно приступать к передаче кода.
Чтобы толкнуть код в удаленный репозиторий, наберите:
[midnight47@centos6 testg]$ git add .
[midnight47@centos6 testg]$ git commit -m "Initial Commit"
[master (root-commit) 7dc0b4e] Initial Commit
1 file changed, 2 insertions(+)
create mode 100644 test.t.txt
[midnight47@centos6 testg]$ git push test2 master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 216 bytes | 54.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:midnight47/test2.git
* [new branch] master -> master
Команда git push толкает все изменения, test2 – это имя нового удаленного репозитория, а master – имя первой ветки.
Теперь для передачи кода в будущем можно просто набирать git push.
Использование веток git
Создадим две ветки («master» и «develop»), а также объединить код от стадии разработки до производства. Ветка – это, по сути, уникальная серия изменений кода с уникальным именем. Каждый репозиторий может иметь одну или больше ветвей. По умолчанию первая ветвь называется «master».
Просмотр ветвей
Прежде чем создавать новую ветвь необходимо просмотреть все существующие ветви.
Чтобы это сделать, введите следующую команду:
git branch -a
Флаг «-а» в конце команды говорит GIT о необходимости просмотреть все существующие ветви, включая те, которых нет в локальной рабочей области
Результат будет иметь примерно такой вид:
* master
remotes/origin/master
Символ звездочки перед «master»в первой строке выведенных результатов указывает на текущую ветку.
Вторая строка указывает на то, что на удаленном сервере под названием «origin» также существует ветвь с именем «master».
Научившись просматривать ветви, попробуйте создать свою собственную ветвь.
Создание ветвей
Как говорится в начале этой статьи, нужно настроить рабочую среду (production) и среду разработки (development).
Ветка по умолчанию «master» для рабочей среды уже существует, значит, теперь нужно создать только ветку «develop» для среды разработки.
Чтобы создать новую ветку под названием «develop», введите следующее:
git checkout -b develop
При условии, что ветки с таким именем еще не существует, результат будет иметь такой вид:
Switched to a new branch 'develop'
Если такая ветка уже существует, GIT выведет:
fatal: A branch named 'develop' already exists.
Между ветками можно переключаться при помощи команды «git checkout»:
git checkout master
или:
git checkout develop
При условии, что ветка, на которую необходимо переключиться, существует, результат будет выглядеть примерно так:
Switched to branch 'master'
При попытке переключиться на несуществующую ветку, к примеру:
git checkout nosuchbranch
GIT выведет:
error: pathspec 'nosuchbranch' did not match any file(s) known to git.
Теперь, имея несколько веток, нужно научиться работать с ними.
В данном случае, ветка «develop» будет использована для тестирования изменений, а ветка «master» — для их публикации.
Чтобы проиллюстрировать этот процесс, нужно вернуться к ветке «develop»:
git checkout develop
Внесение изменений в ветку «develop»
В данной ветке нужно создать пустой файл под названием «develop».
Он не будет существовать до тех пор, пока не будет объединен с веткой «master» (на следующем этапе).
touch develop
Теперь нужно сказать GIT о необходимости отслеживать новый файл.
Чтобы добавить файл «develop», введите:
git add develop
Вышеприведенный набор команд создаст пустой файл под названием «develop» и добавит его в GIT.
Данный файл нужно также зафиксировать, то есть, прикрепить файл к текущей ветке (сейчас это ветка «develop»).
git commit -m "develop file" develop
Теперь данный файл существует на ветке «develop»; на ветке «master» его пока нет.
Теперь нужно убедиться, что «develop» является текущей веткой. Для этого введите следующее:
git branch
Выведенный результат выглядит так:
* develop
master
Как было сказано ранее, символ звездочки рядом с именем ветки указывает на текущую ветку.
Команда «ls» покажет, что существует два файла:
ls
Выведенный результат подтвердит, что оба файла (под названием «file» и «develop») найдены:
develop file
Слияние кода между ветвями
Теперь необходимо переключиться на ветку «master», что можно сделать при помощи команды «git checkout»:
git checkout master
Чтобы убедиться, что ветка «master» является текущей, введите следующее:
git branch
Символ звездочки укажет на текущую ветку:
develop
* master
Команда «ls» покажет, что нового файла «develop» нет:
file
На самом деле, его просто нет в ветке «master», он находится в ветке «develop».
Процесс передачи кода с одной ветки в другую (часто со среды разработки на рабочую среду) называется слиянием.
При слиянии важно помнить о том, что текущей должна быть та ветка, с которой нужно объединиться.
В данном случае нужно объединить ветку «develop», на которой находится файл «develop», с веткой «master».
Учитывая, что ветка «master» уже является текущей, все, что нужно сделать – запустить команду «merge».
Одна из команд, которую можно передать команде «merge», – команда «—no-ff», которая говорит GIT сохранить все сообщения о коммитах до слияния. Это облегчит отслеживание изменений в будущем.
Чтобы объединить изменения ветки «develop» с веткой «master», введите следующую команду:
git merge develop --no-ff
Вывод команды будет примерно следующим:
Merge made by the 'recursive' strategy.
0 files changed
create mode 100644 develop
Команда «ls» подтвердит что файл «develop» теперь находится на ветке «master»:
develop file
Последнее, что нужно сделать, — это передать все изменения на удаленный сервер; это можно сделать при помощи команды «git push»:
git push
Перемещение репозитория
К примеру, у вас есть репозиторий, и его нужно залить на другой адрес. Нужно сначала скачать изменения ветки мастер, затем поменять адрес origin и залить его в по новому адрес.
1 2 3 4 |
git pull git remote set-url origin <new-url> git push && git push --tags |
Комит новой версию с тэгом
К примеру, вы выпустили новую версию продукта 1.5.2. Чтобы ее зарелизить, нужно выполнить следующую команду:
1 2 |
git add . && git commit -m "v1.0.8" && git tag 1.0.8 && git push && git push --tags |
-----------------------------------------------------------------------------------------------------
Примеры:
2 и более пользователей на github
Создаём репозиторий, после под пользователем клонируем его:
git clone git@github.com:midnight47/web.serv.sh.git
добавляем на github ключ:
~/.ssh/id_rsa.pub
переходим в директорию /home/user1/web.serv.sh
настраиваем:
git config user.name user1
git config user.email user1@example.ru
копируем данные(наш проект), после добавляем
[user1@centos6 web.serv.sh]$ git add .
ставим коммент:
[user1@centos6 web.serv.sh]$ git commit -m "create" .
[master (root-commit) 1f5082e] create
1 file changed, 2173 insertions(+)
create mode 100644 webserv.skript.sh.05.05.18.sh
смотрим туда ли будем грузить:
[user1@centos6 web.serv.sh]$ git remote -v
origin git@github.com:midnight47/web.serv.sh.git (fetch)
origin git@github.com:midnight47/web.serv.sh.git (push)
пушим:
[user1@centos6 web.serv.sh]$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 18.05 KiB | 1.20 MiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:midnight47/web.serv.sh.git
* [new branch] master -> master
добавляем ветку для разработки:
[user1@centos6 web.serv.sh]$ git checkout -b develop
Switched to a new branch 'develop'
проверяем:
[user1@centos6 web.serv.sh]$ git branch
* develop
master
вносим изменения в файл, сохраняем,
далее добавляем:
[user1@centos6 web.serv.sh]$ git add webserv.skript.sh.05.05.18.sh
комментим:
git commit -m "test develop" webserv.skript.sh.05.05.18.sh
[develop 826552e] test develop
1 file changed, 1 insertion(+)
пушим, при этом будет создана новая ветка на github:
[user1@centos6 web.serv.sh]$ git push --set-upstream origin develop
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 558 bytes | 279.00 KiB/s, done.
Total 6 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To github.com:midnight47/web.serv.sh.git
* [new branch] develop -> develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
теперь при внесении изменений в файл пушим следующим образом:
[user1@centos6 web.serv.sh]$ git add webserv.skript.sh.05.05.18.sh
[user1@centos6 web.serv.sh]$ git commit -m "dobalil stroky test" webserv.skript.sh.05.05.18.sh
[develop 41fa836] dobalil stroky test
1 file changed, 1 insertion(+)
[user1@centos6 web.serv.sh]$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 303 bytes | 303.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:midnight47/web.serv.sh.git
5928798..41fa836 develop -> develop
добавляем второго пользователя:
adduser user2
создаём ключ:
ssh-keygen -t rsa -b 4096
добавляем на гитхаб новый ключ
cat .ssh/id_rsa.pub
клонируем репозиторий:
git clone git@github.com:midnight47/web.serv.sh.git
Cloning into 'web.serv.sh'…
The authenticity of host 'github.com (192.30.253.113)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 12 (delta 3), pack-reused 0
Receiving objects: 100% (12/12), 18.80 KiB | 9.40 MiB/s, done.
Resolving deltas: 100% (3/3), done.
настраиваем:
[user2@centos6 web.serv.sh]$ git config user.email "user2@example.com"
[user2@centos6 web.serv.sh]$ git config user.name "user2"
[user2@centos6 ~]$ cd web.serv.sh/
проверяем:
[user2@centos6 web.serv.sh]$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
переключаемся на develop
[user2@centos6 web.serv.sh]$ git checkout develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
Switched to a new branch 'develop'
[user2@centos6 web.serv.sh]$ git branch
* develop
master
вносим изменения:
[user2@centos6 web.serv.sh]$ nano webserv.skript.sh.05.05.18.sh
[user2@centos6 web.serv.sh]$ git add webserv.skript.sh.05.05.18.sh
[user2@centos6 web.serv.sh]$ git commit -m "add test user2" webserv.skript.sh.05.05.18.sh
[develop 2b7ad0d] add test user2
1 file changed, 1 insertion(+)
пушим
[user2@centos6 web.serv.sh]$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 306 bytes | 306.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:midnight47/web.serv.sh.git
41fa836..2b7ad0d develop -> develop
смотрим лог gita:
[user2@centos6 web.serv.sh]$ git log
commit 2b7ad0dfa83ccede2c10836d8978dd37414453e9 (HEAD -> develop, origin/develop)
Author: user2 <user2@example.com>
Date: Wed Jun 6 09:08:54 2018 -0400
add test user2
commit 41fa83600a2f20db57e8cb1b73e7b3576f35bfbc
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:55:12 2018 -0400
dobalil stroky test
commit 592879825f084fb3786149113bec746a033a6725
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:44:40 2018 -0400
komment develop
commit 826552ebda22b37e28cc35a419b5f59af076cfef
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:39:21 2018 -0400
test develop
commit 1f5082eb7574d431a1ba922f5df5669e3b62f6e0 (origin/master, origin/HEAD, master)
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:15:56 2018 -0400
create
переключаемся на первого пользователя и переходим в каталог:
[user1@centos6 ~]$ cd web.serv.sh/
проверяем ветку:
[user1@centos6 web.serv.sh]$ git branch
* develop
master
смотрим git log (в нём нет данных внесённых пользователем user2)
[user1@centos6 web.serv.sh]$ git log
commit 41fa83600a2f20db57e8cb1b73e7b3576f35bfbc (HEAD -> develop, origin/develop)
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:55:12 2018 -0400
dobalil stroky test
commit 592879825f084fb3786149113bec746a033a6725
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:44:40 2018 -0400
komment develop
commit 826552ebda22b37e28cc35a419b5f59af076cfef
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:39:21 2018 -0400
test develop
commit 1f5082eb7574d431a1ba922f5df5669e3b62f6e0 (origin/master, master)
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:15:56 2018 -0400
create
В локальном репозитории отсутствуют последние изменения, имеющиеся в удаленном репозитории. Для решения этой проблемы надо выполнить команду git pull, которая скачает последние изменения из удаленного репозитория и смержит их с вашими локальными правками.
git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:midnight47/web.serv.sh
41fa836..2b7ad0d develop -> origin/develop
Updating 41fa836..2b7ad0d
Fast-forward
webserv.skript.sh.05.05.18.sh | 1 +
1 file changed, 1 insertion(+)
далее можно проверить git log
[user1@centos6 web.serv.sh]$ git log
commit 2b7ad0dfa83ccede2c10836d8978dd37414453e9 (HEAD -> develop, origin/develop)
Author: user2 <user2@example.com>
Date: Wed Jun 6 09:08:54 2018 -0400
add test user2
commit 41fa83600a2f20db57e8cb1b73e7b3576f35bfbc
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:55:12 2018 -0400
dobalil stroky test
commit 592879825f084fb3786149113bec746a033a6725
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:44:40 2018 -0400
komment develop
commit 826552ebda22b37e28cc35a419b5f59af076cfef
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:39:21 2018 -0400
test develop
commit 1f5082eb7574d431a1ba922f5df5669e3b62f6e0 (origin/master, master)
Author: user1 <user1@example.ru>
Date: Wed Jun 6 08:15:56 2018 -0400
create
создание локального репозитория:
добавляем пользователя
adduser git
переходим в него
su git
создаём ключи:
ssh-keygen -t rsa -b 4096
создаём директорию в которой будет проект:
[git@centos6 ~]$ mkdir proekt_git
переходим в созданную директорию и инициируем репозиторий:
[git@centos6 ~]$ cd proekt_git
[git@centos6 proekt_git]$ git init
Initialized empty Git repository in /home/git/proekt_git/
настраиваем:
[git@centos6 proekt_git]$ git config user.email "git@example.com"
[git@centos6 proekt_git]$ git config user.name "git"
копируем наш проект
[root@centos6 ~]# cp webserv.skript.sh.05.05.18.sh /home/git/proekt_git/
[root@centos6 ~]# chown git:git /home/git/proekt_git/webserv.skript.sh.05.05.18.sh
[root@centos6 ~]# su git
добавим и закоммитем:
[git@centos6 proekt_git]$ git add .
[git@centos6 proekt_git]$ git commit -m "начало проекта" webserv.skript.sh.05.05.18.sh
[master (root-commit) 802470b] начало проекта
1 file changed, 2173 insertions(+)
create mode 100644 webserv.skript.sh.05.05.18.sh
сейчас мы на ветке master:
[git@centos6 proekt_git]$ git branch -a
* master
создадим ветку для разработки:
[git@centos6 proekt_git]$ git checkout -b develop
Switched to a new branch 'develop'
проверяем:
[git@centos6 proekt_git]$ git branch
* develop
master
внесём изменения:
[git@centos6 proekt_git]$ nano webserv.skript.sh.05.05.18.sh
[git@centos6 proekt_git]$ git add .
[git@centos6 proekt_git]$ git commit -m "изменения из ветки разработки" webserv.skript.sh.05.05.18.sh
[develop 0bda7d3] изменения из ветки разработки
1 file changed, 1 insertion(+)
добавим ssh ключ со второго аккаунта/сервера:
[root@centos62 .ssh]# scp ~/.ssh/id_rsa.pub git@192.168.1.150:~/.ssh/authorized_keys
git@192.168.1.150's password:
id_rsa.pub 100% 735 0.7KB/s 00:00
клонируем проект для второго пользователя:
[root@centos62 ~]# git clone git@192.168.1.150:~/proekt_git
Cloning into 'proekt_git'…
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (6/6), 18.38 KiB | 18.38 MiB/s, done.
Resolving deltas: 100% (1/1), done.
заходим в директорию и смотрим на какой мы ветке:
[root@centos62 ~]# cd proekt_git/
[root@centos62 proekt_git]# git branch
* develop
настраиваем:
[root@centos62 proekt_git]# git config user.email "root@example.com"
[root@centos62 proekt_git]# git config user.name "root"
правим файл, добавляем и комментим:
[root@centos62 proekt_git]# nano webserv.skript.sh.05.05.18.sh
[root@centos62 proekt_git]# git add .
[root@centos62 proekt_git]# git commit -m "коммент со второго сервера" webserv.skript.sh.05.05.18.sh
[develop f10e46c] коммент со второго сервера
1 file changed, 1 insertion(+)
на сервере меняем ветку:
[git@centos6 proekt_git]$ git checkout master
Switched to branch 'master'
[git@centos6 proekt_git]$ git branch
develop
* master
на втором клиенте пушим:
[root@centos62 proekt_git]# git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 355 bytes | 355.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To 192.168.1.150:~/proekt_git
0bda7d3..f10e46c develop -> develop
теперь правим данные на мастере:
[git@centos6 proekt_git]$ nano webserv.skript.sh.05.05.18.sh
добавляем и комментим:
[git@centos6 proekt_git]$ git add webserv.skript.sh.05.05.18.sh
[git@centos6 proekt_git]$ git commit -m "тест 3"
[develop 35e95ff] тест 3
1 file changed, 1 insertion(+), 1 deletion(-)
чтобы эти данные отобразились на втором нашем аккаунте/сервере то в директории выполняем команду git pull :
[root@centos62 proekt_git]# git pull
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From 192.168.1.150:~/proekt_git
eec0187..cd5937c develop -> origin/develop
Updating eec0187..cd5937c
Fast-forward
webserv.skript.sh.05.05.18.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
1 |