Федеральное государственное бюджетное образовательное учреждение высшего образования «Национальный исследовательский университет «МЭИ» Институт информационных и вычислительных технологий Кафедра Управления и интеллектуальных технологий Дисциплина: Разработка программного обеспечения систем управления Лабораторная работа №2 Система контроля версий Git Выполнил студент группы А-03-22 Соколов Михаил Игоревич Вариант: - Проверил Козлюк Дмитрий Александрович Москва 2023 Цель работы Знать понятия и компоненты систем контроля версий (СКВ), порядок и приемы работы с ними. Уметь участвовать в командной разработке, используя конкретную СКВ — Git, а также популярный хостинг репозитариев — GitHub. Ход работы: Вход в терминал и создание структуры каталогов ● Создаем папки пользователей (mkdir alice, mkdir bob) ● В папке пользователя alice создаем папку project Инициализация репозитария и настройка Git ● Инициализируем хранилище git (git init) ● Настраиваем папки пользователя, с которым будем работать: /Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git init Initialized empty Git repository in C:/Users/Михаил/Desktop/РПОСУ_LABS/lab02/alice/project/.git/ Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git config user.name 'Alice(SokolovMI)' Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git config user.email 'sokolov.mouse@yandex.ru' Создание коммитов: Занесение файлов под контроль версий ● Просматриваем состояние рабочей копии(git status) ● $ git status ● On branch master ● ● No commits yet ● ● Untracked files: ● (use "git add ..." to include in what will be committed) ● project/ ● ● nothing added to commit but untracked files present (use "git add" to track) В первой строке ссылка HEAD указывает на ветку main Вторая стр. говорит о том, что еще не было создано коммитов Третья стр. показывает не отслеживаемые файлы в хранилище git, и подсказывает как их добавить Последняя стр. говорит о том, что нет добавленных (отслеживаемых) файлов, которые можно будет закоммитить ● Добавляем файл с кодом и просматриваем изменения Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git add project.cpp $ git status On branch master No commits yet Changes to be committed: (use "git rm --cached ..." to unstage) new file: project.cpp Untracked files: (use "git add ..." to include in what will be committed) .vs/ project.sln project.vcxproj project.vcxproj.filters project.vcxproj.user Появилась строка с файлами в индексе, стоящими в очереди на коммит Составление сообщений к коммитам ● Создаем 2 коммита с информацией о коде программы Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git commit -m 'code: заготовка программы' [master (root-commit) d636c51] code: заготовка программы 1 file changed, 10 insertions(+) create mode 100644 project/project.cpp Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git add project.vcxproj Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git commit -m 'build: добавлен файл проекта' [master c861f53] build: добавлен файл проекта 1 file changed, 147 insertions(+) create mode 100644 project/project.vcxproj ● После добавления в программу ввода 2х чисел видим, что файл main.cpp был изменен $ git status On branch master Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: project.cpp Untracked files: (use "git add ..." to include in what will be committed) .vs/ Debug/ project.sln project.vcxproj.filters project.vcxproj.user no changes added to commit (use "git add" and/or "git commit -a") ● Проделываем ряд изменений с кодом программы и делаем коммиты несколькими способами Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git add project.cpp Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git commit -m 'code: добавлен ввод двух чисел' [master 6a5f2f9] code: добавлен ввод двух чисел 1 file changed, 4 insertions(+), 1 deletion(-) Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git add -u Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git commit -m 'code: добавлен вывод суммы двух чисел' [master b0cccbb] code: добавлен вывод суммы двух чисел 1 file changed, 1 insertion(+) Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git add -u Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git commit -m 'code: добавлен вывод разности двух чисел' [master 6840347] code: добавлен вывод разности двух чисел 1 file changed, 1 insertion(+), 1 deletion(-) Просмотр истории ● С помощью команды git log и различных ее опций просматриваем журнал коммитов Используем команду git log –stat $ git log --stat commit f06ff5f49bf85b52e4e526413339d9b3d73f7fe0 Author: Alice (SokolovMI) Date: Mon Apr 4 00:24:21 2022 +0300 code: добавлен вывод суммы двух чисел project/project.cpp | 1 + 1 file changed, 1 insertion(+) commit c18ecb8b271394c5de3ca25acb82e191b4cf40e6 Author: Alice (SokolovMI) Date: Mon Apr 4 00:22:09 2022 +0300 code: добавлен ввод двух чисел project/project.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 75fb07c2c44a8cfa0acf7333f3605fd06fc64047 Author: Alice (SokolovMI) Date: Mon Apr 4 00:16:51 2022 +0300 build: добавлен файл проекта project/project.vcxproj | 147 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) commit e04836eb8008275bbf51e37956c45e55570c2dd5 Author: Alice (SokolovMI) Date: Mon Apr 4 00:15:09 2022 +0300 code: заготовка программы project/project.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) В последнем коммите первой строкой показывается хэш коммита, по которому можно потом найти этот коммит Во 2 стр. записан автор, внесший этот коммит, а стр. ниже – время создания коммита Далее идет комментарий к коммиту Перечисление файлов, в которых произошли изменения и кол-во измененных строчек(“+” добавленная стр., “-” удаленная стр.) В последней стр. приведена статистика изменений данных файлов (Использование других способов просмотра истории) Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git log --oneline --decorate a66d232 (HEAD -> master) code: добавлен вывод разности двух чисел f06ff5f code: добавлен вывод суммы двух чисел c18ecb8 code: добавлен ввод двух чисел 75fb07c build: добавлен файл проекта e04836e code: заготовка программы Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git log --oneline --decorate --all --graph * a66d232 (HEAD -> master) code: добавлен вывод разности двух чисел * f06ff5f code: добавлен вывод суммы двух чисел * c18ecb8 code: добавлен ввод двух чисел * 75fb07c build: добавлен файл проекта * e04836e code: заготовка программы Просмотр коммитов ● Используем команды для просмотра отдельных коммитов(git log –main.cpp/ git log –grep “code: ”) $ git log --grep "build:" commit 75fb07c2c44a8cfa0acf7333f3605fd06fc64047 Author: Alice (SokolovMI) Date: Mon Apr 4 00:16:51 2022 +0300 build: добавлен файл проекта Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git log -- project.vcxproj commit 75fb07c2c44a8cfa0acf7333f3605fd06fc64047 Author: Alice (SokolovMI) Date: Mon Apr 4 00:16:51 2022 +0300 build: добавлен файл проекта (Таким способом мы просмотрели информацию о коммите по измененному файлу и по теме коммита) ● Далее тремя способами просматриваем информацию о предпоследнем коммите (результат всех способов один, поэтому в отчете не повторялся) $ git show HEAD~1 commit f06ff5f49bf85b52e4e526413339d9b3d73f7fe0 Author: Alice (SokolovMI) Date: Mon Apr 4 00:24:21 2022 +0300 code: добавлен вывод суммы двух чисел diff --git a/project/project.cpp b/project/project.cpp index b5c14f2..32965e8 100644 --- a/project/project.cpp +++ b/project/project.cpp @@ -8,5 +8,6 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; + cout << "A + B = " << a + b << '\n'; } $ git show master~1 commit f06ff5f49bf85b52e4e526413339d9b3d73f7fe0 Author: Alice (SokolovMI) Date: Mon Apr 4 00:24:21 2022 +0300 code: добавлен вывод суммы двух чисел diff --git a/project/project.cpp b/project/project.cpp index b5c14f2..32965e8 100644 --- a/project/project.cpp +++ b/project/project.cpp @@ -8,5 +8,6 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; + cout << "A + B = " << a + b << '\n'; } ● Добавим изменения в рабочую копию и посмотрим их с помощью команды git diff $ git diff diff --git a/project/project.cpp b/project/project.cpp index aaf4408..83a4ad6 100644 --- a/project/project.cpp +++ b/project/project.cpp @@ -10,6 +10,6 @@ int main() cin >> a >> b; cout << "A + B = " << a + b << '\n'; cout << "A - B = " << a - b << '\n'; - + cout << "A * B = " << a * b << '\n'; } В качестве первой стр. мы видим входные данные команды для сравнения файлов Далее идет заголовок с легендой изменения, место измененного кода и измененная функция На след. строке идут строки вокруг измененной части, удаленные и добавленные строки Откат изменений ● Вносим изменения в кода, а потом откатываем их до состояния в опр. коммите с помощью команды git reset Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) ● $ git commit -a -m "code: добавлен вывод произведения двух чисел" ● [master 9c8286a] code: добавлен вывод произведения двух чисел ● 1 file changed, 1 insertion(+), 1 deletion(-) $ git log --oneline --decorate --all --graph * 9c8286a (HEAD -> master) code: добавлен вывод произведения двух чисел * a66d232 code: добавлен вывод разности двух чисел * f06ff5f code: добавлен вывод суммы двух чисел * c18ecb8 code: добавлен ввод двух чисел * 75fb07c build: добавлен файл проекта * e04836e code: заготовка программы Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git reset --hard HEAD~1 HEAD is now at a66d232 code: добавлен вывод разности двух чисел Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ git log --oneline --decorate --all --graph * a66d232 (HEAD -> master) code: добавлен вывод разности двух чисел * f06ff5f code: добавлен вывод суммы двух чисел * c18ecb8 code: добавлен ввод двух чисел * 75fb07c build: добавлен файл проекта * e04836e code: заготовка программы Обмен кодом через удаленное хранилище ● Обмен кодом через удалённое хранилище. Для загрузки данных в репозитарий GitHub будет использоваться протокол SSH. Поэтому для обмена данными с сервером нужно сгенерировать пару из открытого и закрытого ключей. $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/Михаил/.ssh/id_rsa): Created directory '/c/Users/\320\234\320\270\321\205\320\260\320\270\320\273/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Passphrases do not match. Try again. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/Михаил/.ssh/id_rsa Your public key has been saved in /c/Users/Михаил/.ssh/id_rsa.pub The key fingerprint is: SHA256:0MzhEBRRk/mrelKrqjfI1UB1Izcb7BS1aYy9V/kcvWc Михаил@DESKTOP-I19EJ7T The key's randomart image is: +---[RSA 3072]----+ | oO*@=. | | . X=@ o ..| | . .oB.* o..| | . ..... . oo| | o S ... .E| | . . . .. ..| | . o . o | | o o . + | | .o.oo= | +----[SHA256]-----+ ● Также после этого отображаются уникальные данные для ключа. Поскольку в работе вводить пароль при каждом использовании ключа может быть неудобно, можно использовать программу-агент, которую достаточно запустить перед началом работы: $ ssh-add Enter passphrase for /c/Users/Михаил/.ssh/id_rsa: Identity added: /c/Users/Михаил/.ssh/id_rsa (Михаил@DESKTOP-I19EJ7T) Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ cat~/.ssh/id_rsa.pub bash: cat~/.ssh/id_rsa.pub: No such file or directory Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (master) $ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6oimev/WI3OQG64daxuBCXf9xGje5LvYfiHMrYSPvUW7KTtue7g5aT+UjyST25yt7yLI51pzC2AMZYWXPBOO+e1U6u1qFOhD5JJ+P7iNUWAVaKpcVD0piy+WZMyxRIRTO9SDHCtEZIN4PKL/vJipvQhKM2OLkiK454gitIoUECXOZcO1WE6/CQy+uXiNyRpEdlweZEyfGuBkh9KfRuS0quw08b4NUeklWIAV5WXNk9alEYaTVMm2539nKCgOA7h3A1Y2geiU4jjn4RU2i99qP3PM1i0Pj1FXJxXpTMd0g/xI50qesEG7aFyxi7BAI1FGuusvX5BUjn7FHLoBQgUfTsgeU44yqnwTGxVQF46B6Yr5y336ktmMFc39jT/6YLmbTu76i0Fs4W9CNF7hx0nqimUXpZ4Wzy29ZeqPPYXROzCciWd0dr3LcOoBbv2SHNq4iZhEzKlzxzqWhxOtnRVdkRrEyVy0lwXNitctkegKkgeP0kaYdiqN41sgCB5N9oyM= Михаил@DESKTOP-I19EJ7T Затем в настройках аккаунта GitHub нужно добавить публичный ключ, который по умолчанию записывается в файл id_rsa.pub. ● Теперь добавим репозитарий на который будем загружать хранилище git, и загрузим хранилище git на GitHub с помощью команды git push. $ git push -u origin main The authenticity of host 'github.com (140.82.121.3)' can't be established. ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'github.com' (ED25519) to the list of known hosts. Enumerating objects: 20, done. Counting objects: 100% (20/20), done. Delta compression using up to 4 threads Compressing objects: 100% (14/14), done. Writing objects: 100% (20/20), 2.95 KiB | 756.00 KiB/s, done. Total 20 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (2/2), done. To github.com:Kra1k/cs-lab02.git * [new branch] main -> main branch 'main' set up to track 'origin/main'. Branch 'main' set up to track remote branch 'main' from 'origin'. ● К работе присоединяется боб. Клонируем репозитарий с помощью git clone. $ git clone git@github.com:Kra1k/cs-lab02.git Cloning into 'cs-lab02'... Enter passphrase for key '/c/Users/Михаил/.ssh/id_rsa': remote: Enumerating objects: 20, done. remote: Counting objects: 100% (20/20), done. remote: Compressing objects: 100% (12/12), done. Receiving objects: 100% (20/20), done. Resolving deltas: 100% (2/2), done. remote: Total 20 (delta 2), reused 20 (delta 2), pack-reused 0 ● Настроим хранилище боба Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git config user.name 'Bob(SokolovMI)' Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git config email.name 'sokolov.mouse@yandex.ru' ● Боб добавляет новый коммит, опережающий версию на сервере, и загружает его на GitHub. Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git add project.cpp Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git commit -m 'code: добавление вывода произведения двух чисел' [main 49afd29] code: добавление вывода произведения двух чисел 1 file changed, 1 insertion(+), 1 deletion(-) Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git log --oneline --decorate --all --graph * 49afd29 (HEAD -> main) code: добавление вывода произведения двух чисел * a66d232 (origin/main, origin/HEAD) code: добавлен вывод разности двух чисел * f06ff5f code: добавлен вывод суммы двух чисел * c18ecb8 code: добавлен ввод двух чисел * 75fb07c build: добавлен файл проекта * e04836e code: заготовка программы Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git push Enter passphrase for key '/c/Users/Михаил/.ssh/id_rsa': Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 456 bytes | 456.00 KiB/s, done. Total 4 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), completed with 1 local object. To github.com:Kra1k/cs-lab02.git a66d232..49afd29 main -> main ● Обновляем версию программы у Алисы. Для этого загружаем загрузку изменений с помощью git fetch. А затем переносим ветку main на скачанную версию с помощью git pull (который, вообще говоря, все равно вызывает git fetch, поэтому его ручной вызов не обязателен). $ git fetch remote: Enumerating objects: 7, done. remote: Counting objects: 100% (7/7), done. remote: Compressing objects: 100% (2/2), done. remote: Total 4 (delta 1), reused 4 (delta 1), pack-reused 0 Unpacking objects: 100% (4/4), 436 bytes | 48.00 KiB/s, done. From github.com:Kra1k/cs-lab02 a66d232..49afd29 main -> origin/main ) Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 49afd29 (origin/main) code: добавление вывода произведения двух чисел * a66d232 (HEAD -> main) code: добавлен вывод разности двух чисел * f06ff5f code: добавлен вывод суммы двух чисел * c18ecb8 code: добавлен ввод двух чисел * 75fb07c build: добавлен файл проекта * e04836e code: заготовка программы Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/ali $ git pull --ff-only Updating a66d232..49afd29 Fast-forward project/project.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) ● Далее Алиса вносит новое изменение, а Боб его скачивает. Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git add -u Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git commit -m 'code: добавлен вывод деления двух чисел' [main 71dc1f0] code: добавлен вывод деления двух чисел 1 file changed, 1 insertion(+) $ git push Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 446 bytes | 446.00 KiB/s, done. Total 4 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), completed with 1 local object. To github.com:Kra1k/cs-lab02.git 49afd29..71dc1f0 main -> main $ git pull Enter passphrase for key '/c/Users/Михаил/.ssh/id_rsa': remote: Enumerating objects: 7, done. remote: Counting objects: 100% (7/7), done. remote: Compressing objects: 100% (2/2), done. remote: Total 4 (delta 1), reused 4 (delta 1), pack-reused 0 Unpacking objects: 100% (4/4), 426 bytes | 7.00 KiB/s, done. From github.com:Kra1k/cs-lab02 49afd29..71dc1f0 main -> origin/main Updating 49afd29..71dc1f0 Fast-forward project/project.cpp | 1 + 1 file changed, 1 insertion(+) ● Теперь Алиса и Боб добавляют в программу печать максимума и минимума соответственно, а затем пробуют загрузить изменения на репозитарий на сервере. Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git add -u Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git commit -m 'code: добавлен вывод максимума' [main 7e48e49] code: добавлен вывод максимума 1 file changed, 6 insertions(+) Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git push Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 449 bytes | 449.00 KiB/s, done. Total 4 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), completed with 1 local object. To github.com:Kra1k/cs-lab02.git 71dc1f0..7e48e49 main -> main ● (боб) Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git add -u Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git commit -m 'code: добавление вывода минимума' [main e507b8a] code: добавление вывода минимума 1 file changed, 6 insertions(+) Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git push Enter passphrase for key '/c/Users/Михаил/.ssh/id_rsa': To github.com:Kra1k/cs-lab02.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'github.com:Kra1k/cs-lab02.git' hint: Updates were rejected because the remote contains work that you do 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. (Однако загрузить на сервер изменения получается только у Алисы потому, что Боб затем пытается загрузить версию, основанную на более старом коммите, чем самый новый коммит в репозитарии GitHub.) ● Загрузим версию с сервера Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git fetch Enter passphrase for key '/c/Users/Михаил/.ssh/id_rsa': remote: Enumerating objects: 7, done. remote: Counting objects: 100% (7/7), done. remote: Compressing objects: 100% (2/2), done. remote: Total 4 (delta 1), reused 4 (delta 1), pack-reused 0 Unpacking objects: 100% (4/4), 429 bytes | 7.00 KiB/s, done. From github.com:Kra1k/cs-lab02 71dc1f0..7e48e49 main -> origin/main Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git log --oneline --decorate --all --graph * e507b8a (HEAD -> main) code: добавление вывода минимума | * 7e48e49 (origin/main, origin/HEAD) code: добавлен вывод максимума |/ * 71dc1f0 code: добавлен вывод деления двух чисел * 49afd29 code: добавление вывода произведения двух чисел * a66d232 code: добавлен вывод разности двух чисел * f06ff5f code: добавлен вывод суммы двух чисел * c18ecb8 code: добавлен ввод двух чисел * 75fb07c build: добавлен файл проекта * e04836e code: заготовка программы (Ветка main раздвоилась.) ● Объединим коммиты Боба и Алисы, поместив коммит Боба выше с помощью комманды git rebase. $ git rebase origin/main Auto-merging project/project.cpp CONFLICT (content): Merge conflict in project/project.cpp error: could not apply e507b8a... code: добавление вывода минимума hint: Resolve all conflicts manually, mark them as resolved with hint: "git add/rm ", 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 e507b8a... code: добавление вывода минимума ● Комманда завершается с ошибкой из-за конфликта в файле с кодом main.cpp. Производный файл от файла Алисы и Боба записывается в рабочую копию с помеченными метками конфликта. Убираем метки конфликта, и дорабатываем код так, чтобы программа компилировалась и работала. Затем загружаем изменения в индекс и продолжаем операцию git rebase, с помощью флага –continue. Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main|REBASE 1/1) $ git add -u Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main|REBASE 1/1) $ git status interactive rebase in progress; onto 7e48e49 Last command done (1 command done): pick e507b8a code: добавление вывода минимума No commands remaining. You are currently rebasing branch 'main' on '7e48e49'. (all conflicts fixed: run "git rebase --continue") Changes to be committed: (use "git restore --staged ..." to unstage) modified: project.cpp $ git rebase --continue [detached HEAD 47fca42] code: добавление вывода минимума 1 file changed, 4 insertions(+) Successfully rebased and updated refs/heads/main. Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git log --oneline --decorate --all --graph * 47fca42 (HEAD -> main) code: добавление вывода минимума * 7e48e49 (origin/main, origin/HEAD) code: добавлен вывод максимума * 71dc1f0 code: добавлен вывод деления двух чисел * 49afd29 code: добавление вывода произведения двух чисел * a66d232 code: добавлен вывод разности двух чисел * f06ff5f code: добавлен вывод суммы двух чисел * c18ecb8 code: добавлен ввод двух чисел * 75fb07c build: добавлен файл проекта * e04836e code: заготовка программы (Получили желаемый результат) ● Отправим изменения на сервер. Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/bob/cs-lab02/project (main) $ git push Enter passphrase for key '/c/Users/Михаил/.ssh/id_rsa': Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 516 bytes | 516.00 KiB/s, done. Total 4 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), completed with 1 local object. To github.com:Kra1k/cs-lab02.git 7e48e49..47fca42 main -> main ● В это время Алиса создаёт новую ветку (с помощью комманды git branch) для изменения типа переменных на вещественный. Начинает она с коммита, когда добавлена печать максимума. Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git branch double Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git checkout double Switched to branch 'double' Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (double) $ git add -u Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (double) $ git commit -m 'code: изменен тип переменных на вещественный' [double 091584f] code: изменен тип переменных на вещественный 1 file changed, 1 insertion(+), 1 deletion(-) ● Затем переключается на ветку main. И синхронизирует её Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (double) $ git checkout main Switched to branch 'main' Your branch is up to date with 'origin/main'. Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git pull remote: Enumerating objects: 7, done. remote: Counting objects: 100% (7/7), done. remote: Compressing objects: 100% (2/2), done. remote: Total 4 (delta 1), reused 4 (delta 1), pack-reused 0 Unpacking objects: 100% (4/4), 496 bytes | 8.00 KiB/s, done. From github.com:Kra1k/cs-lab02 7e48e49..47fca42 main -> origin/main Updating 7e48e49..47fca42 Fast-forward project/project.cpp | 4 ++++ 1 file changed, 4 insertions(+) Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 091584f (double) code: изменен тип переменных на вещественный | * 47fca42 (HEAD -> main, origin/main) code: добавление вывода минимума |/ * 7e48e49 code: добавлен вывод максимума * 71dc1f0 code: добавлен вывод деления двух чисел * 49afd29 code: добавление вывода произведения двух чисел * a66d232 code: добавлен вывод разности двух чисел * f06ff5f code: добавлен вывод суммы двух чисел * c18ecb8 code: добавлен ввод двух чисел * 75fb07c build: добавлен файл проекта * e04836e code: заготовка программы (Получаем одновременно две ветки) ● Объединяем их с помощью комманды git merge. Вносим последние изменения и загружаем на GitHub. Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git merge double Auto-merging project/project.cpp Merge made by the 'ort' strategy. project/project.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) . Михаил@DESKTOP-I19EJ7T MINGW64 ~/Desktop/РПОСУ_LABS/lab02/alice/project (main) $ git push Enumerating objects: 14, done. Counting objects: 100% (14/14), done. Delta compression using up to 4 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (8/8), 802 bytes | 802.00 KiB/s, done. Total 8 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To github.com:Kra1k/cs-lab02.git 47fca42..f8fd08e main -> main