Files
cs-lab02/README.md

50 KiB

Отчёт по лабораторной работе №2 "Применение системы контроля версий в Git"

Вход в терминал и создание структуры каталогов

Создаю каталог lab02 для данной ЛР и запускаю в нём Git Bash. Вижу приглашение, указывающее путь к рабочему каталогу и символ $:

/d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02
$

Создаю папки lab02/alice и lab02/bob, имитирующие компьютеры Алисы и Боба:

mkdir alice
mkdir bob

Создаю на компьютере Алисы каталог Project и перехожу в него

$ cd alice

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice
$ mkdir project

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice
$ cd project

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project

Поднимаюсь на уровень выше и возвращаюсь в Project

$ cd ..

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice
$ cd project

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project

Инициализация репозитария и настройка Git

Инициализирую репозитарий в текущем каталоге project (при установке Git был настроен так, чтобы ветка по умолчанию нахывалась main):

$ git init
Initialized empty Git repository in D:/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project/.git/

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Настройка репозитария Алисы

$ git config user.name 'Alice (BadaninaSP)'

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git config user.email 'BadaninaSP@mpei.ru'

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Создание коммитов

Запускаю CodeBlocks и создаю проект в репозитарии Алисы: *Project title: project *Folder to create project in: C:\Users\user\Desktop\lab02\alice *Project filename: project.cbp *Resulting filename: *C:\Users\user\Desktop\lab02\alice\project\project.cbp

После сборки проекта получена нужная структура файлов и каталогов.

Занесение файлов под контроль версий

Просмотр состояния рабочей копии

$ git status
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        bin/
        main.cpp
        obj/
        project.cbp
        project.depend

nothing added to commit but untracked files present (use "git add" to track)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

В ветке main нет коммитов, папки bin/, obj/ и файлы main.c, project.cbp, project.depend не отслеживаются.

Добавляю main.cpp в индекс

$ git add main.cpp

Снова смотрю состояние рабочей копии

$ git status
On branch main

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/
        project.cbp
        project.depend


ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

В очередной коммит войдёт только файл main.cpp, остальные файлы и папки не отслеживаются.

Делаю коммит с этим файлом

$ git commit -m 'code: заготовка программы'
[main (root-commit) 0cda65b] code: заготовка программы
 1 file changed, 9 insertions(+)
 create mode 100644 main.cpp

Составление сообщений к коммитам

Добавляю файл проекта в индекс

$ git add project.cbp
warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   project.cbp

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        bin/
        obj/
        project.depend


ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

и делаю коммит с ним

$ git commit -m 'build: добавлен файл проекта'
[main fab7219] build: добавлен файл проекта
 1 file changed, 40 insertions(+)
 create mode 100644 project.cbp

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Создание коммитов с изменениями

  1. Состояние рабочей копии до изменения main.cpp
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        bin/
        obj/
        project.depend

nothing added to commit but untracked files present (use "git add" to track)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Заменяю содержимое функции main():

cout << "Enter A and B: ";
int a, b;
cin >> a >> b;

После изменения main.cpp Git отображает наличие изменений в файле main.cpp, которые не выставлены на коммит

$ 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/
        project.depend

no changes added to commit (use "git add" and/or "git commit -a")

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Делаю коммит с обновлённым файлом

$ git add main.cpp

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git commit -m 'code: добавлен ввод двух чисел'
[main fca14d8] code: добавлен ввод двух чисел
 1 file changed, 3 insertions(+), 2 deletions(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
  1. Добавляю в программу вывод суммы a и b, дописав в конце main() строку cout << "A + B = " << a + b; и снова делаю коммит
$ git add -u

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/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


ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git commit -m 'code: добавлен вывод суммы a и b'
[main da84366] code: добавлен вывод суммы a и b
 1 file changed, 1 insertion(+)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
  1. Добавляю в программу вывод разности a и b, изменив инструкцию cout в main():
cout << "A + B = " << a + b << '\n'
<< "A - B = " << a - b << '\n';

и делаю коммит

$ git commit -a -m 'code: добавлен вывод разности a и b'
[main 703d751] code: добавлен вывод разности a и b
 1 file changed, 2 insertions(+), 1 deletion(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Игнорирование файлов

Создаю файл .gitignore, в котором указываю файлы, которые не нуждаются в контроле версий и должны игнорироваться:

/bin
/obj
*.layout
project.depend

Теперь эти файлы не отображаются как неотслеживаемые и просто игнорируются:

$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore

nothing added to commit but untracked files present (use "git add" to track)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Создаю коммит с .gitignore

$ git add .gitignore

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git commit -m 'git: добавлен .gitignore'
[main 59cb19c] git: добавлен .gitignore
 1 file changed, 4 insertions(+)
 create mode 100644 .gitignore

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Просмотр истории

Работа с журналом репозитария

Вывод команды git log --stat для последнего коммита:

$ git log --stat
commit 59cb19c306ff2257f830406d60ad1fc785c88c33 (HEAD -> main)
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Mon Feb 2 01:25:04 2026 +0400

    git: добавлен .gitignore

 .gitignore | 4 ++++
 1 file changed, 4 insertions(+)

Первая строка - хэш текущего коммита и указание на ветку, в которой он находится. Вторая строка - автор коммита (здесь это Алиса). Третья строка - дата и время, когда совершён коммит. Четвёртая строка - заголовок коммита. Пятая строка - имя изменённого файла и количество изменений. Шестая строка - один файл изменён, 4 вставки.

Вывод коммитов по теме build:

$ git log --grep "build:"
commit fab7219f8b1c6faf26857c85e61a86f759905b87
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Sun Feb 1 02:03:46 2026 +0400

    build: добавлен файл проекта

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Вывод коммитов, затрагивающих project.cbp:

$ git log -- project.cbp
commit fab7219f8b1c6faf26857c85e61a86f759905b87
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Sun Feb 1 02:03:46 2026 +0400

    build: добавлен файл проекта

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Просмотр коммитов

Просмотр предпоследнего коммита

$ git show HEAD~1
commit 703d7515ac3c339930c278c035cbfb96bb5a65f1
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Mon Feb 2 01:15:24 2026 +0400

    code: добавлен вывод разности a и b

diff --git a/main.cpp b/main.cpp
index 4364dbc..65442c3 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,6 @@ int main()
     cout << "Enter A and B: ";
     int a, b;
     cin >> a >> b;
-    cout << "A + B = " << a + b << '\n';
+    cout << "A + B = " << a + b << '\n'
+        << "A - B = " << a - b << '\n';
 }

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Просмотр изменений

Добавляю в программу вывод произведения a и b, изменив инструкцию cout в main():

cout << "A + B = " << a + b << '\n'
    << "A - B = " << a - b << '\n'
    << "A * B = " << a * b << '\n';

коммит пока не делаю.

Просматриваю изменения в рабочей копии:

$ git diff
diff --git a/main.cpp b/main.cpp
index 65442c3..f94f092 100644
--- a/main.cpp
+++ b/main.cpp
@@ -8,5 +8,6 @@ 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';
 }

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Первая строка вывода - заголовок, сравниваются две версии одного файла: a/ - версия до изменений (в последнем коммите) и b/ - версия после изменений (в рабочей директории). Вторая строка - хэши файлов (blob-объектов, 65442c3 - старый файл из предыдущего коммита, f94f092 - новый файл в рабочей директории) и режим доступа к этим файлам. Третья строка - имя старой версии файла. Четвёртая строка - имя новой версии файла. Пятая строка - диапазон выведенных строк: начиная с 8-й строки выведены 5 строк старого файла и 6 строк нового файла, нижеприведённый фрагмент находится в функции main. Далее - выведены строки с изменениями и строки контекста до и после строк с изменениями (по умолчанию 3).

Вывод различий между самым первым и предпоследним коммитом (там где был добавлен вывод разницы между a и b):

$ git diff HEAD~5 HEAD~1
diff --git a/main.cpp b/main.cpp
index b4392ec..65442c3 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,9 @@ using namespace std;

 int main()
 {
-    cout << "Hello world!" << endl;
-    return 0;
+    cout << "Enter A and B: ";
+    int a, b;
+    cin >> a >> b;
+    cout << "A + B = " << a + b << '\n'
+        << "A - B = " << a - b << '\n';
 }
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>

Видно, что в файле main.cpp заменено содержимое функции main. Также был добавлен файл project.cbp, выведено его содержимое на экран. Файл .gitignore на этом этапе ещё не создан.

Откат изменений

Закоммитила вывод произведения чисел

$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   main.cpp


ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git commit -m 'code: добавлен вывод произведения a и b'
[main a4f0f70] code: добавлен вывод произведения a и b
 1 file changed, 2 insertions(+), 1 deletion(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Отменила этот коммит и вернулась к предыдущему

$ git reset --hard HEAD~1
HEAD is now at 59cb19c git: добавлен .gitignore

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Содержимое файла main.cpp вернулось к тому, которое было до внесения изменений.

Добавлю перед функцией строку main()

// you may type whatever you want

и восстановлю исходное содержимое файла, которое было в последнем коммите

$ git checkout HEAD -- main.cpp

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Содержимое файла вернулось к исходному.

Обмен кодом через удаленное хранилище

Настройка SSH

Создаю пару ключей (открытый и закрытый)

$ ssh-keygen
Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/ibada/.ssh/id_ed25519):
Created directory '/c/Users/ibada/.ssh'.
Enter passphrase for "/c/Users/ibada/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/ibada/.ssh/id_ed25519
Your public key has been saved in /c/Users/ibada/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:Sc1dFrpQOHqeUycF6oRoR0G1JB/ids+0jKXT7DsZQdc ibada@Meouw
The key's randomart image is:
+--[ED25519 256]--+
|       .*o+.o.+o |
|       + Oo*.+o E|
|      o *.Xo=o   |
|     . +.=.%+o.  |
|        So=oO+   |
|          +o.    |
|           ..o   |
|            o.   |
|            ..   |
+----[SHA256]-----+

Запуск агента для упрощения использования ключа

$ eval $(ssh-agent -s)
Agent pid 539

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ ssh-add
Enter passphrase for /c/Users/ibada/.ssh/id_ed25519:
Identity added: /c/Users/ibada/.ssh/id_ed25519 (ibada@Meouw)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Получение открытого ключа $ cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO3mZ2XPvcseBx4hMd7jdwbRhhDWsMfcHYN3n6jWpKjv ibada@Meouw

Отправка проекта на сервер

Создаю на сервере пустой репозитарий под названием cs-lab02 и настраиваю связь с удаленным хранилищем

$ git remote add origin git@uit.mpei.ru:BadaninaSP/cs-lab02.git

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ 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
Warning: Permanently added 'uit.mpei.ru' (ED25519) to the list of known hosts.
Enumerating objects: 18, done.
Counting objects: 100% (18/18), done.
Delta compression using up to 22 threads
Compressing objects: 100% (16/16), done.
Writing objects: 100% (18/18), 2.35 KiB | 1.17 MiB/s, done.
Total 18 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:BadaninaSP/cs-lab02.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Получение проекта с сервера

Открываю новый терминал Git Bash в каталоге bob. Клонирую проект

$ git clone  git@uit.mpei.ru:BadaninaSP/cs-lab02.git project
Cloning into 'project'...
Enter passphrase for key '/c/Users/ibada/.ssh/id_ed25519':
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 18 (delta 2), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (18/18), done.
Resolving deltas: 100% (2/2), done.

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob

Переход в каталог проекта «на машине Боба»

$ cd project

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main)

и настройка его Git

$ git config user.name 'Bob (BadaninaSP)'

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main)
$ git config user.email 'BadaninaSP@mpei.ru'

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main)

Совместная работа над проектом без конфликтов правок

Добавлю в main.cpp вывод произведения чисел:

#include <iostream>

using namespace std;

int main()
{
    cout << "Enter A and B: ";
    int a, b;
    cin >> a >> b;
    cout << "A + B = " << a + b << '\n'
        << "A - B = " << a - b << '\n'
        << "A * B = " << a * b << '\n';
}

сделаю коммит от имени Боба

$ git add main.cpp
$ git commit -m 'code: добавлен вывод произведения a и b'
[main d3c32a5] code: добавлен вывод произведения a и b
 1 file changed, 2 insertions(+), 1 deletion(-)

Проверка того, что этот коммит сделан от имени Боба:

$ git log --stat
commit d3c32a5794c394f82d80104db7916703e4b4244b (HEAD -> main)
Author: Bob (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Tue Feb 3 23:43:43 2026 +0400

    code: добавлен вывод произведения a и b

 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Отправка на сервер

$ git push
Enter passphrase for key '/c/Users/ibada/.ssh/id_ed25519':
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 22 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 428 bytes | 428.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:BadaninaSP/cs-lab02.git
   59cb19c..d3c32a5  main -> 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), 408 bytes | 136.00 KiB/s, done.
From uit.mpei.ru:BadaninaSP/cs-lab02
   59cb19c..d3c32a5  main       -> origin/main

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

В рабочей копии изменений ещё не произошло. Ветка main отстает на один коммит от ветки origin/main:

$ git log --oneline
59cb19c (HEAD -> main) git: добавлен .gitignore
703d751 code: добавлен вывод разности a и b
da84366 code: добавлен вывод суммы a и b
fca14d8 code: добавлен ввод двух чисел
fab7219 build: добавлен файл проекта
0cda65b code: заготовка программы

Продвижение ветки main к скачанной версии

$ git pull --ff-only
Updating 59cb19c..d3c32a5
Fast-forward
 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git log --oneline
d3c32a5 (HEAD -> main, origin/main, origin/HEAD) code: добавлен вывод произведения a и b
59cb19c git: добавлен .gitignore
703d751 code: добавлен вывод разности a и b
da84366 code: добавлен вывод суммы a и b
fca14d8 code: добавлен ввод двух чисел
fab7219 build: добавлен файл проекта
0cda65b code: заготовка программы

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Рабочая копия проекта «у Алисы» соответствует версии «у Боба».

Добавление в программу печати деления

#include <iostream>

using namespace std;

int main()
{
    cout << "Enter A and B: ";
    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';
}

Коммит этого от имени Алисы

$ git add main.cpp

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git commit -m 'code: добавлен вывод деления a на b'
[main 917427b] code: добавлен вывод деления a на b
 1 file changed, 2 insertions(+), 1 deletion(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Отправка на сервер

$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 22 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 421 bytes | 421.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:BadaninaSP/cs-lab02.git
   d3c32a5..917427b  main -> main

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Приём Бобом

$ git pull --ff-only
Enter passphrase for key '/c/Users/ibada/.ssh/id_ed25519':
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), 401 bytes | 44.00 KiB/s, done.
From uit.mpei.ru:BadaninaSP/cs-lab02
   d3c32a5..917427b  main       -> origin/main
Updating d3c32a5..917427b
Fast-forward
 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main)

Рабочая копия проекта «у Боба» соответствует версии «у Алисы».

Разрешение конфликтов правок при совместной работе

Алиса дополняет программу печатью максимума

#include <iostream>

using namespace std;

int main()
{
    cout << "Enter A and B: ";
    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'
        << "max(A, B) = " << max(a, b) << '\n';
}

делает коммит и отправляет его на сервер

$ git add main.cpp

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git commit -m 'code: добавлен вывод максимума'
[main 8a335dc] code: добавлен вывод максимума
 1 file changed, 2 insertions(+), 1 deletion(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 22 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 430 bytes | 430.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:BadaninaSP/cs-lab02.git
   917427b..8a335dc  main -> main

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Боб дополняет программу печатью минимума

#include <iostream>

using namespace std;

int main()
{
    cout << "Enter A and B: ";
    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'
        << "min(A, B) = " << min(a, b) << '\n';
}

делает коммит

$ git add main.cpp

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main)
$ git commit -m 'code: добавлен вывод минимума'
[main 25a8e7e] code: добавлен вывод минимума
 1 file changed, 2 insertions(+), 1 deletion(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main)

и пытается отправить его на сервер

$ git push
Enter passphrase for key '/c/Users/ibada/.ssh/id_ed25519':
To uit.mpei.ru:BadaninaSP/cs-lab02.git
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'uit.mpei.ru:BadaninaSP/cs-lab02.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main)

что заканчивается неудачей из-за наличия в удалённом репозитарии изменений, которые отсутствуют в локальном. «От лица Боба» загрузим коммиты из удаленного хранилища и отобразим историю всех веток.

Enter passphrase for key '/c/Users/ibada/.ssh/id_ed25519':
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), 410 bytes | 45.00 KiB/s, done.
From uit.mpei.ru:BadaninaSP/cs-lab02
   917427b..8a335dc  main       -> origin/main

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main)
$ git log --stat
commit 8a335dcd242cc24b19edce92f6f5d34284e1e851 (HEAD, origin/main, origin/HEAD)
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Wed Feb 4 01:30:47 2026 +0400

    code: добавлен вывод максимума

 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

commit 917427b54001612eed18042cab81c877f327c2af
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Wed Feb 4 01:04:41 2026 +0400

    code: добавлен вывод деления a на b

 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

commit d3c32a5794c394f82d80104db7916703e4b4244b
Author: Bob (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Tue Feb 3 23:43:43 2026 +0400

    code: добавлен вывод произведения a и b

 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

commit 59cb19c306ff2257f830406d60ad1fc785c88c33
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Mon Feb 2 01:25:04 2026 +0400

    git: добавлен .gitignore

 .gitignore | 4 ++++
 1 file changed, 4 insertions(+)

commit 703d7515ac3c339930c278c035cbfb96bb5a65f1
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Mon Feb 2 01:15:24 2026 +0400

    code: добавлен вывод разности a и b

 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

commit da843664d255aa6bbd04695c8e26b4424f3fcd28
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Mon Feb 2 01:03:41 2026 +0400

    code: добавлен вывод суммы a и b

 main.cpp | 1 +
 1 file changed, 1 insertion(+)

commit fca14d80ac2a78122441e9b7157481d374a33ecc
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Mon Feb 2 00:24:16 2026 +0400

    code: добавлен ввод двух чисел

 main.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

commit fab7219f8b1c6faf26857c85e61a86f759905b87
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Sun Feb 1 02:03:46 2026 +0400

    build: добавлен файл проекта

 project.cbp | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

commit 0cda65b553627021651c8584ded99f55eb1b39a4
Author: Alice (BadaninaSP) <BadaninaSP@mpei.ru>
Date:   Sun Feb 1 01:58:32 2026 +0400

    code: заготовка программы

 main.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)

Попытка поместить коммит Боба поверх коммита Алисы заканчивается ошибкой (конфликт слияния в файле main.cpp)

$ git rebase origin/main
Auto-merging main.cpp
CONFLICT (content): Merge conflict in main.cpp
error: could not apply 25a8e7e... 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".
hint: Disable this message with "git config set advice.mergeConflict false"
Could not apply 25a8e7e... # code: добавлен вывод минимума

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main|REBASE 1/1)

Состояние хранилища

$ git status
interactive rebase in progress; onto 8a335dc
Last command done (1 command done):
   pick 25a8e7e # code: добавлен вывод минимума
No commands remaining.
You are currently rebasing branch 'main' on '8a335dc'.
  (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:
  (use "git restore --staged <file>..." to unstage)
  (use "git add <file>..." to mark resolution)
        both modified:   main.cpp

no changes added to commit (use "git add" and/or "git commit -a")

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main|REBASE 1/1)

Продолжается процесс перебазирования; на коммите 8a335dc Проделана команда включения коммита "25a8e7e # code: добавлен вывод минимума" в процесс интерактивного перебазирования Нет оставшихся комманд Сейчас вы перебазируете main на 8a335dc. Исправьте конфликты и запустите "git rebase --continue" Неслившиеся пути: оба изменённых main.cpp Нет изменений добавленных для коммита.

В файле отмечено место конфликта Отредактирую код так, чтобы он включал и правки Алисы, и правки Боба.

#include <iostream>

using namespace std;

int main()
{
    cout << "Enter A and B: ";
    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'
        << "max(A, B) = " << max(a, b) << '\n'
        << "min(A, B) = " << min(a, b) << '\n';
}

Добавляю файл в индекс и продолжаю прерванную операцию rebase:

git add main.cpp
git rebase --continue

Проверяю историю хранилища

$ git log --oneline
fe639cd (HEAD -> main) code: добавлен вывод минимума
8a335dc (origin/main, origin/HEAD) code: добавлен вывод максимума
917427b code: добавлен вывод деления a на b
d3c32a5 code: добавлен вывод произведения a и b
59cb19c git: добавлен .gitignore
703d751 code: добавлен вывод разности a и b
da84366 code: добавлен вывод суммы a и b
fca14d8 code: добавлен ввод двух чисел
fab7219 build: добавлен файл проекта
0cda65b code: заготовка программы

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main)

Она имеет желаемый вид, отправляю её на сервер

$ git push
Enter passphrase for key '/c/Users/ibada/.ssh/id_ed25519':
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 22 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 433 bytes | 433.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:BadaninaSP/cs-lab02.git
   8a335dc..fe639cd  main -> main

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/bob/project (main)

Использование веток

Пока Боб синхронизировал изменения, Алиса решила изменить тип чисел с целых на действительные. Предполагая, что это займет время, Алиса ведет работу в отдельной ветке. На момент начала работы репозитарий Алисы не синхронизирован с сервером, то есть последний коммит добавляет печать максимума. Все действия ведутся «на машине Алисы». Создаю ветку double:

$ git branch double

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Переключаюсь на нее:

$ git checkout double
Switched to branch 'double'

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (double)

Заменяю тип переменных a и b на double

#include <iostream>

using namespace std;

int main()
{
    cout << "Enter A and B: ";
    double 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'
        << "max(A, B) = " << max(a, b) << '\n';
}

и делаю коммит

$ git add main.cpp

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (double)
$ git commit -m 'code: заменён тип переменных a и b на double'
[double 52b8fb1] code: заменён тип переменных a и b на double
 1 file changed, 1 insertion(+), 1 deletion(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (double)

Синхронизация ветки main «на машине Алисы» с сервером

$ git pull
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), 413 bytes | 22.00 KiB/s, done.
From uit.mpei.ru:BadaninaSP/cs-lab02
   8a335dc..fe639cd  main       -> origin/main
Updating 8a335dc..fe639cd
Fast-forward
 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)
$ git log --oneline --all
52b8fb1 (double) code: заменён тип переменных a и b на double
fe639cd (HEAD -> main, origin/main, origin/HEAD) code: добавлен вывод минимума
8a335dc code: добавлен вывод максимума
917427b code: добавлен вывод деления a на b
d3c32a5 code: добавлен вывод произведения a и b
59cb19c git: добавлен .gitignore
703d751 code: добавлен вывод разности a и b
da84366 code: добавлен вывод суммы a и b
fca14d8 code: добавлен ввод двух чисел
fab7219 build: добавлен файл проекта
0cda65b code: заготовка программы

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Сливаю ветку double в main:

$ git merge double
Auto-merging main.cpp
Merge made by the 'ort' strategy.
 main.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

История всех изменений

$ git log --oneline --all
d1bd17c (HEAD -> main) code: заменён тип переменных a и b на double Merge branch 'double'
52b8fb1 (double) code: заменён тип переменных a и b на double
fe639cd (origin/main, origin/HEAD) code: добавлен вывод минимума
8a335dc code: добавлен вывод максимума
917427b code: добавлен вывод деления a на b
d3c32a5 code: добавлен вывод произведения a и b
59cb19c git: добавлен .gitignore
703d751 code: добавлен вывод разности a и b
da84366 code: добавлен вывод суммы a и b
fca14d8 code: добавлен ввод двух чисел
fab7219 build: добавлен файл проекта
0cda65b code: заготовка программы

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Отправляю на сервер

$ git push
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 22 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 803 bytes | 803.00 KiB/s, done.
Total 6 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:BadaninaSP/cs-lab02.git
   fe639cd..d1bd17c  main -> main

ibada@Meouw MINGW64 /d/Учёба/Разработка программного обеспечения систем управления/Модуль 2/lab02/alice/project (main)

Все изменения появились на сервере.