Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

1091 строка
40 KiB
Plaintext

Отчет по лабораторной работе №2 "Система контроля версий Git"
Выполнил Шестов Д.Н.
Проверил Козлюк Д.А.
На рабочем столе создаем каталог "lab02" и запускаем в нем Git Bash.
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 /
$ cd c
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 /c
$ cd Users
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 /c/Users
$ cd Шестов Денис
bash: cd: too many arguments
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 /c/Users
$ cd "Шестов Денис"
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~
$ cd Desktop
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop
$ cd lab02
С помощью команды mkdir создаю каталоги alice и bob
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02
$ mkdir alice
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02
$ mkdir bob
Переходим в каталог alice, создаем там подкаталог project, заходим в него в него и выходим обратно в алису.
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02
$ cd alice
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice
$ mkdir progect
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice
$ cd progect
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect
$ cd ..
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice
$ cd progect
Инициализация репозитория
В каталоге project инициализируем репозитарий
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect
$ git init
Initialized empty Git repository in C:/Users/Шестов Денис/Desktop/lab02/alice/progect/.git/
Настраиваем репозитарий
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master)
$ git config user.name 'Alice(ShestovDN)'
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master)
$ git config user.email 'ShestovDN@mpei.ru'
Создание коммита
Создем проект в репозитарии Алисы. Он имеет путь C:\Users\GSTQ\Desktop\lab02\alice
вызов команды git status показывает файлы внутри проекта
$ git config user.email 'ShestovDN@mpei.ru'
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master)
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
main.cpp
obj/
progect.cbp
nothing added to commit but untracked files present (use "git add" to track)
Файл main.cpp заносим под Git:
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master)
$ git add main.cpp
статус еще раз
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: main.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
progect.cbp
новый файл меин появился
выполняем первый коммит
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master)
$ git commit -m 'code: заготовка программы'
[master (root-commit) 949b6ad] code: заготовка программы
1 file changed, 9 insertions(+)
create mode 100644 main.cpp
и меняем название ветки после первого коммита
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (master)
$ git branch -m main
делаю коммит проекта и просматриваю изменение статуса
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git add progect.cbp
warning: in the working copy of 'progect.cbp', LF will be replaced by CRLF the next time Git touches it
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git commit -m 'build: добавление проект'
[main 1e415e0] build: добавление проект
1 file changed, 40 insertions(+)
create mode 100644 progect.cbp
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: main.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
no changes added to commit (use "git add" and/or "git commit -a")
проект исчез ис списка неизвестных вайлов
Изменяю код на ввод двух чисел
#include <iostream>
using namespace std;
int main(){
cout << "Enter A and B: ";
int a, b;
cin >> a >> b;
return 0;
}
Делаем 3 коммита тремя способами.
Сначала добавляю в код вывод суммы введенных чисел, затем делаю коммит, промежуточно посмотрев статус
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git add main.cpp
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: main.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
project.depend
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git commit -m "..."
[main a2172dd] ...
1 file changed, 4 insertions(+), 2 deletions(-)
Добавляем в код разность чисел и ее вывод, делаю коммит
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git add -u
ключ -u (updated) позволяет работать только с измененными файлами.
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: main.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
project.depend
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git commit -m "..."
[main 311567b] ...
1 file changed, 1 insertion(+)
меняю код на тот что в методичке и делаю последний коммит
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git commit -a -m "..."
[main 08c8bb0] ...
1 file changed, 3 insertions(+), 1 deletion(-)
Скрытие ненужного
Сделаю системные каталоги bin и obj неотображаемыми в status. Создаю в проекте пустой файл, задаю ему имя .gitignore,
пишу строку /bin, пересобираю и сохраняю проект. Теперь git status показывает следующее
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: project.cbp
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
obj/
project.depend
no changes added to commit (use "git add" and/or "git commit -a")
видно, что бин пропал из списка
скрываю obj
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: project.cbp
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
project.depend
no changes added to commit (use "git add" and/or "git commit -a")
делаю коммит с темой гит
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git add .gitignore
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git commit -m "git"
[main 47f9720] git
1 file changed, 3 insertions(+)
create mode 100644 .gitignore
просмотр изменений разными способами
$ git log --stat
commit 8bff39f067513947c95539c3591aa3d2d4a7c6b7 (HEAD -> main)
после слова commit идет его полный хэш, по которому к нему в дальнейшем можно будет обратиться.
Author: Alice(ShestovDN) <ShestovDN@mpei.ru>
автор коммита
Date: Mon Mar 13 10:38:17 2023 +0300
Дата создания коммита, время местное с указанием отклонения по UTC.
git
main.cpp | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-) два добавления и три удаления данных.
commit 71248b044cf4b0d0ff85543773a2ef598a2f7a3d
Author: Alice(ShestovDN) <ShestovDN@mpei.ru>
Date: Mon Mar 13 10:33:44 2023 +0300
code: Добавлен вывод разности файлов
main.cpp | 1 +
1 file changed, 1 insertion(+)
commit a0f4cab0833a71f49874ecf58db71f37a582cf9c
Author: Alice(ShestovDN) <ShestovDN@mpei.ru>
Date: Mon Mar 13 10:30:06 2023 +0300
code: Добавлен вывод суммы чисел
main.cpp | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
commit 1a7913c37026f930f7219fdad7e040007f688f67
Author: Alice(ShestovDN) <ShestovDN@mpei.ru>
Date: Mon Mar 13 10:17:57 2023 +0300
build: Добавлен файл проекта
project.cbp | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
commit 83e242df8a39b03bfc4702a7f8162bf34028ab4d
Author: Alice(ShestovDN) <ShestovDN@mpei.ru>
Date: Mon Mar 13 09:59:52 2023 +0300
code: Заготовка программы
main.cpp | 9 +++++++++
1 file changed, 9 insertions(+)
второй способ
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate
Сокращенная форма вывода: короткий хэш, нет данных о времени и авторе, на описание каждого коммита
одна строка.
8bff39f (HEAD -> main) git
71248b0 code: Добавлен вывод разности файлов
a0f4cab code: Добавлен вывод суммы чисел
1a7913c build: Добавлен файл проекта
83e242d code: Заготовка программы
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate --all --graph
опция all выводит историю для всех веток (у нас одна). graph показывает историю в виде графа, но из-за приоритета опции oneline эти графы сократились до одной звёздочки в каждой строке.
* 8bff39f (HEAD -> main) git
* 71248b0 code: Добавлен вывод разности файлов
* a0f4cab code: Добавлен вывод суммы чисел
* 1a7913c build: Добавлен файл проекта
* 83e242d code: Заготовка программы
поиск по изменениям
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log -- project.cbp
commit 1a7913c37026f930f7219fdad7e040007f688f67
Author: Alice(ShestovDN) <ShestovDN@mpei.ru>
Date: Mon Mar 13 10:17:57 2023 +0300
build: Добавлен файл проекта
Если поиск связан с конкретной темой, она указывается в кавычках после опции grep
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --grep "build:"
commit 1a7913c37026f930f7219fdad7e040007f688f67
Author: Alice(ShestovDN) <ShestovDN@mpei.ru>
Date: Mon Mar 13 10:17:57 2023 +0300
build: Добавлен файл проекта
просмотр предпоследнего коммита с помощью show
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/progect (main)
$ git show HEAD~1
commit 08c8bb0b15043604b1b5882409d1c73ff5411760
Author: Alice(ShestovDN) <ShestovDN@mpei.ru>
Date: Mon Jun 5 15:46:48 2023 +0300
...
diff --git a/main.cpp b/main.cpp
index 3414e57..ae24dab 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,6 +7,8 @@ int main()
cout << "Enter A and B: ";
int a, b;
cin >> a >> b;
- cout<<a+b;
+ cout << "A + B = " << a + b << '\n'
+ << "A - B = " << a - b << '\n';
+
}
добавим в код вывод произведения чисел. С помощью git diff просмотрим изменения.
$ git diff
warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it
diff --git a/main.cpp b/main.cpp
показано, что main.cpp имеет две версии: старую "а" и новую "b".
index 5e77b4a..ed523a8 100644 хэш коммита
--- a/main.cpp
+++ b/main.cpp старая версия файла удалена заменена новой
@@ -5,6 +5,7 @@ int main(){
int a, b;
cin >> a >> b;
cout << "A + B = " << a + b << '\n'
- << "A - B = " << a - b << '\n';
+ << "A - B = " << a - b << '\n' В этой строке произошло изменение, но она уже существовала до этого: убрана точка с запятой.
+ << "A * B = " << a * b << '\n'; Этой строки не было изначально, она была добавлена в этом изменении.
return 0;
}
diff --git a/project.cbp b/project.cbp
index 99bb702..34f06bc 100644
--- a/project.cbp
+++ b/project.cbp
@@ -32,6 +32,7 @@
<Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler>
+ <Unit filename=".gitignore" /> В .gitignore произошли изменения, ведь он скрывает bin и obj которые меняются после пересборки.
<Unit filename="main.cpp" />
<Extensions>
<lib_finder disable_auto="1" />
Сообщим в качестве аргументов для функции diff хэши самого первого коммита и того, где была добавлена разность.
В выводе будут все изменения между ними, без разделения на промежуточне коммиты, но отдельные для каждого файла
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git diff 83e242df8a39b03bfc4702a7f8162bf34028ab4d 71248b044cf4b0d0ff85543773a2ef598a2f7a3d
diff --git a/main.cpp b/main.cpp
index b4392ec..b73d0df 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,9 +1,11 @@
#include <iostream>
-
using namespace std;
+int main(){
+ cout << "Enter A and B: ";
+ int a, b;
+ cin >> a >> b;
+ cout << "a + b = " << a + b;
+ cout << "a - b = " << a - b;
-int main()
-{
- cout << "Hello world!" << endl;
return 0;
}
diff --git a/project.cbp b/project.cbp
new file mode 100644
index 0000000..99bb702
--- /dev/null
+++ b/project.cbp
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<CodeBlocks_project_file>
+ <FileVersion major="1" minor="6" />
+ <Project>
+ <Option title="project" />
+ <Option pch_mode="2" />
+ <Option compiler="gcc" />
+ <Build>
+ <Target title="Debug">
+ <Option output="bin/Debug/project" prefix_auto="1" extension_auto="1" />
+ <Option object_output="obj/Debug/" />
+ <Option type="1" />
+ <Option compiler="gcc" />
+ <Compiler>
+ <Add option="-g" />
+ </Compiler>
+ </Target>
+ <Target title="Release">
+ <Option output="bin/Release/project" prefix_auto="1" extension_auto="1" />
+ <Option object_output="obj/Release/" />
+ <Option type="1" />
+ <Option compiler="gcc" />
+ <Compiler>
+ <Add option="-O2" />
+ </Compiler>
+ <Linker>
+ <Add option="-s" />
+ </Linker>
+ </Target>
+ </Build>
+ <Compiler>
+ <Add option="-Wall" />
+ <Add option="-fexceptions" />
+ </Compiler>
+ <Unit filename="main.cpp" />
+ <Extensions>
+ <lib_finder disable_auto="1" />
+ </Extensions>
+ </Project>
+</CodeBlocks_project_file>
Откат коммитов
Сделаем коммит, зафиксировав добавление произведения
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add -u
warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m "code: Добавлен вывод произведения"
[main 6962d6d] code: Добавлен вывод произведения
2 files changed, 3 insertions(+), 1 deletion(-)
Откатим коммит на один назад
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git reset --hard HEAD~1
HEAD~1 указывает, что нужный коммит за один шаг до текущего. Ключ --hard - удаление всех отслеживаемых файлов из ветки
HEAD is now at 8bff39f code: Подкорректировано оформление
Добавляю перед строкой int main(){ комментарий "//You may type here whatever you want :)"
Пересобираю, сохраняю файл, откатываю до состояния предыдущего коммита
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git checkout HEAD -- main.cpp
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$
После нажатия ОК на предупредительном окне строка исчезает
Подключение к серверу
Настраиваю SSH
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ ssh-keygen
Команда создаст пару ключей: открытый и закрытый. Закрытый ключ записывается в файл, для него я создаю и подтверждаю пароль.
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/GSTQ/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/GSTQ/.ssh/id_rsa
Your public key has been saved in /c/Users/GSTQ/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:MZfRrs4VPI3pl/xQ3AzI1lmhFcmUKfrTVsr2OcLpgMo Шестов Денис@LAPTOP-T2VQPTS1
The key's randomart image is:
+---[RSA 3072]----+
| .o ooBB|
| o=.*= |
| o o+.=.+.|
| + .B . *|
| S o.=.+.|
| o ooOo |
| + o.o++.|
| . . o .+ oo|
| E ... .|
+----[SHA256]-----+
```
Запустим программу, предоставляющую доступ к ключам без подтверждения пароля каждый раз.
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ eval `ssh-agent -s`
Agent pid 1115
Терминал вернул идентификатор агента. Значит, он запущен.
Загружаем ключ
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ ssh-add
Enter passphrase for /c/Users/GSTQ/.ssh/id_rsa:
Ввожу пароль.
Identity added: /c/Users/GSTQ/.ssh/id_rsa (Шестов Денис@LAPTOP-T2VQPTS1)
Команда cat отображает содержимое файла в консоль
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ cat ~/.ssh/id_rsa.pub
AAAAB3NzaC1yc2EAAAADAQABAAABgQDnyiCBBXbUbKE62QRyfw+BJObFTj9DdGja2AWSw/H8Mr1Ek2Qvg3yDbT3/dHu4u7EKco5gxSmEuGYB6jubBrtfN7g5oPYVpcbYY/ltDXUlpqpEp9j5TCSHvgvoKvocG843NmU9J230sgibaAqidjVrgBrapMRHoxAjpKfASkdVTkt084R9KBwucP7RU7tVRkLIgfJnJLm1nUf92DgjgaW4ExdEUH76n4Ah78tWZUyu78oTP7RWDnpnKGjF/whADTD8FLJwmZFrRaBmMFh1lHrNIFYmvaq7NC+Ekr+nm5mHN/uLGuSHONkFHQyQQVE1w8e4t5NLdas2pwQnXxLWe8J3wjPOfahgf/zOK1++ToYzPqZlZSfVWdK6o5LW7rDCzL/8ITA1FZ2GgZW2OMpzt2FrGCr3KcvgXe6WVoPA25IpEXHxlXV71ePEFQviaOimqYKT1QWLa/Le8b9GRgnGmYPuOTip62u+2MtZvzqEc8TPfDm7jWqL4Gqm8uNKlIcTkmk= Шестов Денис@LAPTOP-T2VQPTS1
Копирую этот ключ, перехожу на сайт Git UIT, Пользователь -> Настройки -> SSH/GPG ключи -> Управление SSH ключами
-> Добавить ключ. Ввожу ключ, переименовываю его.
Нажав на +, создаю новый репозитарий. Ввожу имя, настраиваю, подтверждаю создание. Выданы команды для активации,
ввожу их в командную строку
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git remote add origin git@uit.mpei.ru:ShestovDN/cs-lab2.git push -u origin main
The authenticity of host 'uit.mpei.ru (193.233.68.149)' can't be established.
ED25519 key fingerprint is SHA256:Q5w0UKEzQKA3J6NyMtjwCLvtAykoxdugIXjx6NwU4NA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added 'uit.mpei.ru' (ED25519) to the list of known hosts.
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 12 threads
Compressing objects: 100% (14/14), done.
Writing objects: 100% (15/15), 2.11 KiB | 1.05 MiB/s, done.
Total 15 (delta 2), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:ShestovDN/cs-lab2.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
После обновления проекта файлы появились в интерфейсе.
Добавление нового пользователя
Перехожу в каталог bob и запускаю bash для него. Клонирую проект
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob
$ git clone git@uit.mpei.ru:ShestovDN/cs-lab02.git project
Cloning into 'project'...
Enter passphrase for key '/c/Users/GSTQ/.ssh/id_rsa': Введен пароль.
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 15 (delta 2), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (15/15), done.
Resolving deltas: 100% (2/2), done.
Инициализирую Боба
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob
$ cd project
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git config user.name 'Alice(ShestovDN)'
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git config user.email 'ShestovDN@mpei.ru'
"На машине Боба" делаю коммит и отправляю его на сервер.
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 390 bytes | 390.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To http://uit.mpei.ru/git/ShestovDN/cs-lab02.git
8bff39f..2d4cef2 main -> main
От имени Алисы загружаю изменения
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git fetch
Enter passphrase for key '/c/Users/GSTQ/.ssh/id_rsa':
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 370 bytes | 52.00 KiB/s, done.
From uit.mpei.ru:ShestovDN/cs-lab02
8bff39f..2d4cef2 main -> origin/main
История всех веток
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --graph --decorate --all
* 2d4cef2 (origin/main) code: Возвращен вывод произведения
* 8bff39f (HEAD -> main) code: Подкорректировано оформление
* 71248b0 Добавлен вывод разности файлов
* a0f4cab code: Добавлен вывод суммы чисел
* 1a7913c build: Добавлен файл проекта
* 83e242d code: Заготовка программы
Продвигаю ветку main к скачанной версии
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git pull --ff-only
Updating 8bff39f..2d4cef2
Fast-forward
main.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
От имени Алисы в код был добавлен вывод деления. Теперь код выглядит так
<...>
cout << "A + B = " << a + b << '\n'
<< "A - B = " << a - b << '\n'
<< "A * B = " << a * b << '\n'
<< "A / B = " << a / b << '\n'; <...>
```
Добавляю изменение в область отслеживания
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add -u
Делаю коммит
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: Добавлен вывод деления'
[main 380aa92] code: Добавлен вывод деления
1 file changed, 2 insertions(+), 1 deletion(-)
Отправляю его на сервер
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 386 bytes | 386.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To http://uit.mpei.ru/git/ShestovDN/cs-lab02.git
2d4cef2..380aa92 main -> main
получаю изменение "на машине Боба"
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 366 bytes | 40.00 KiB/s, done.
From http://uit.mpei.ru/git/ShestovDN/cs-lab02
2d4cef2..380aa92 main -> origin/main
Пододвигаю ветку
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git pull --ff-only
Updating 2d4cef2..380aa92
Fast-forward
main.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Устранение конфликтов правок
"На машине Алисы" добавляю вывод максимума
Отправляю в git
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add -u
Коммит
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: Добавлена печать максимума'
[main f72cf38] code: Добавлена печать максимума
1 file changed, 2 insertions(+), 1 deletion(-)
Отправка коммита на сервер
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 426 bytes | 426.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To http://uit.mpei.ru/git/ShestovDN/cs-lab02.git
380aa92..f72cf38 main -> main
"На машине Боба" добавляю минимум и проделываю то же самое
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git add -u
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git commit -m 'code: Добавлен вывод минимума'
[main 5d9e81d] code: Добавлен вывод минимума
1 file changed, 2 insertions(+), 1 deletion(-)
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git push
To http://uit.mpei.ru/git/ShestovDN/cs-lab02.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'http://uit.mpei.ru/git/ShestovDN/cs-lab02.git'
hint: Updates were rejected because the remote contains work that you dо
Обновления отклонены, так как на удаленном компьютере есть работа которой нет у вас.
hint: not have locally. This is usually caused by another repository pushing
Другой репозиторий отправляет ту же ссылку.
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Подгружаю изменения с сервера
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 406 bytes | 33.00 KiB/s, done.
From http://uit.mpei.ru/git/ShestovDN/cs-lab02
380aa92..f72cf38 main -> origin/main
Смотрю, что получилось
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git log --all --decorate --graph --oneline
* 5d9e81d (HEAD -> main) code: Добавлен вывод минимума
| * f72cf38 (origin/main, origin/HEAD) code: Добавлена печать максимума
|/
* 380aa92 code: Добавлен вывод разности
от последнего обещго коммита исходят две ветви: на сервере лежит вывод максимума Алисы,в локальном репозитории лежит вывод минимума Боба (на сервере его нет!)
* 2d4cef2 code: Возвращен вывод произведения
* 8bff39f code: Подкорректировано оформление
* 71248b0 Добавлен вывод разности файлов
* a0f4cab code: Добавлен вывод суммы чисел
* 1a7913c build: Добавлен файл проекта
* 83e242d code: Заготовка программы
Необходимо поместить коммит Боба на сервер поверх коммита Алисы (то есть восстановить линейную последовательность, чтобы коммит Боба основывался на коде, получившемся в результате коммита Алисы)
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git rebase origin/main
Auto-merging main.cpp
CONFLICT (content): Merge conflict in main.cpp
error: could not apply 5d9e81d... code: Добавлен вывод минимума
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
Could not apply 5d9e81d... code: Добавлен вывод минимума
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1)
$ git status
interactive rebase in progress; onto f72cf38
Last command done (1 command done):
pick 5d9e81d code: Добавлен вывод минимума
No commands remaining.
You are currently rebasing branch 'main' on 'f72cf38'. В настоящее время вы пытаетесь переместить ветку main к f72cf38.
(fix conflicts and then run "git rebase --continue") Исправьте конфликты и продолжите перемещение.
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths: Необъединенные пути. В обоих случаях изменяется файл main.cpp.
(use "git restore --staged <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: main.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
main.exe
main.o
no changes added to commit (use "git add" and/or "git commit -a")
Открываю "На машине Боба" проект и вижу, что место конфликта отображено в коде графически
<<<<<<< HEAD
<< "Maximum between A and B = " << max(a,b);
=======
<< "Minimum between A and B = " << min(a,b);
>>>>>>> 5d9e81d (code: Добавлен вывод минимума)
Вручную редактирую код, убрав все системные подсказки и объединив правки Боба и Алисы. Пересобираю проект и проверяю. Работает.
Продолжаю перемещение
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1)
$ git add main.cpp
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1)
$ git rebase --continue
[detached HEAD a15ac7f] code: Добавлен вывод минимума (fix)
1 file changed, 2 insertions(+), 1 deletion(-)
Successfully rebased and updated refs/heads/main.
Теперь история линейна, доказывается просмотром log
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git log --all --decorate --graph --oneline
* a15ac7f (HEAD -> main) code: Добавлен вывод минимума (fix)
* f72cf38 (origin/main, origin/HEAD) code: Добавлена печать максимума
* 380aa92 code: Добавлен вывод разности
* 2d4cef2 code: Возвращен вывод произведения
* 8bff39f code: Подкорректировано оформление
* 71248b0 Добавлен вывод разности файлов
* a0f4cab code: Добавлен вывод суммы чисел
* 1a7913c build: Добавлен файл проекта
* 83e242d code: Заготовка программы
Использование веток
От имени Алисы создаю новую ветку, чтобы сделать в ней изменение типа переменных, не затрагивая при этом основную.
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git branch double
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
Переключаюсь на новую ветку
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git checkout double
Switched to branch 'double'
Изменяю в коде тип с int на double, пересобираю, заношу под Git все изменения отслеживаемых файлов
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (double)
$ git add -u
Делаю коммит
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (double)
$ git commit -m 'code: Заменен тип переменных'
[double 22beab3] code: Заменен тип переменных
1 file changed, 1 insertion(+), 1 deletion(-)
Переключаюсь обратно на main
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (double)
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
Сливаю временную ветку double и главную ветку main в одну (то есть присоединяю double к main)
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git merge double
Updating f72cf38..22beab3
Fast-forward
main.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Коммичу факт слияния двух веток
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'branch: Слияние веток main и double'
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
main.exe
main.o
project.depend
project.layout
nothing added to commit but untracked files present (use "git add" to track)
Отправляю изменения на сервер
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 367 bytes | 367.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To http://uit.mpei.ru/git/ShestovDN/cs-lab02.git
f72cf38..22beab3 main -> main
Просматриваю историю
Шестов Денис@LAPTOP-T2VQPTS1 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --graph --decorate --all
* 22beab3 (HEAD -> main, origin/main, double) code: Заменен тип переменных
* f72cf38 code: Добавлена печать максимума
* 380aa92 code: Добавлен вывод разности
* 2d4cef2 code: Возвращен вывод произведения
* 8bff39f code: Подкорректировано оформление
* 71248b0 Добавлен вывод разности файлов
* a0f4cab code: Добавлен вывод суммы чисел
* 1a7913c build: Добавлен файл проекта
* 83e242d code: Заготовка программы