diff --git a/отчёт.txt b/отчёт.txt new file mode 100644 index 0000000..2d68a7b --- /dev/null +++ b/отчёт.txt @@ -0,0 +1,821 @@ +Отчёт по лабораторной работе №2 «Система контроля версий Git» + +Выполнила: Колдина А. Э. +Группа: А-01-24 + +Примечание: работа выполнялась на Windows. + +1.Вход в терминал и создание структуры каталогов +Создаю на рабочем столе каталог lab02 и запускаю в нём Git Bash, приглашение: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02 +$ +Смотрю файлы в рабочем каталоге с помощью команды ls, так как в каталоге пусто, ls ничего не выводит: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02 +$ ls + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02 +$ + +Создаю папки Алисы и Боба: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02 +$ mkdir alice + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02 +$ mkdir bob + +Перехожу в каталог alica с помощью команды cd и создаю каталог project: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02 +$ cd alice + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice +$ mkdir project + +Перехожу в каталог cd, поднимаюсь на уровень выше (с помощью cd ..) и возвращаюсь обратно в каталог: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice +$ cd project + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project +$ cd .. + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice +$ cd project + +2.Инициализация репозитария и настройка Git +Инициализирую (команда git init) репозитарий в текущем каталоге (project): +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project +$ git init +Initialized empty Git repository in C:/Users/koldinad/Desktop/lab02/alice/project/.git/ + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (master) +$ + +Имя ветки по умолчанию master, поменяю её имя на main: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (master) +$ git branch -m main +Настраиваю репозитарий Алисы: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git config user.name 'Alice (KoldinaAE)' + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git config user.email 'arinakoldina@mail.ru' + +3.Создание коммитов +В CodeBlocks создаю проект в репозитарии Алисы +Занесение файлов под контроль версий +Просмотр состояния рабочей копии: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main + +No commits yet + +Untracked files: + (use "git add ..." to include in what will be committed) + bin/ + obj/ + main.cpp + project.cbp + project.layout +nothing added to commit but untracked files present (use "git add" to track) +3 строка - указывается на ветку main +4 строка - пишет, что ещё не было создано коммитов +5, 7-9 строки - показывают неотслеживаемые файлы в хранилище git +6 строка - показывает, как добавить файлы в коммит +10 строка - говорит, что нет добавленных файлов в коммит, но есть неотслеживаемые файлы + +Заношу файл main.cpp под Git: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +Смотрю состояние рабочей копии: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main + +No commits yet + +Changes to be committed: + (use "git rm --cached ..." to unstage) + new file: main.cpp + +Untracked files: + (use "git add ..." to include in what will be committed) + bin/ + obj/ + project.cbp + project.layout +Появилась строка с файлом, который можно добавить в коммит + +Выполняю коммит с файлом main.cpp и сообщением: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: заготовка программы' +[main (root-commit) ab3f27a] code: заготовка программы + 1 file changed, 9 insertions(+) + create mode 100644 main.cpp +Составление сообщений к коммитам +Заношу файл project.cbp под Git и выполняю коммит с сообщением: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add project.cbp +warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'build: добавлен файл проекта' +[main aabe4a4] build: добавлен файл проекта + 1 file changed, 40 insertions(+) + create mode 100644 project.cbp + +Создание коммитов с изменениями +Меняю тело функции main() на ввод двух чисел, смотрю состояние репозитория: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +Changes not staged for commit: + (use "git add ..." to update what will be committed) + (use "git restore ..." to discard changes in working directory) + modified: main.cpp + +Untracked files: + (use "git add ..." to include in what will be committed) + bin/ + obj/ + project.layout + +no changes added to commit (use "git add" and/or "git commit -a") +4 строка - показывает изменения, не подготовленные для коммита +6 строка - предлагает отменить изменения +7 строка - показывает изменённый файл + +Изменяю код и делаю коммит суммы a и b: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m "code: вывод суммы" +[main ddf8503] code: вывод суммы + 1 file changed, 5 insertions(+), 3 deletions(-) + +Изменяю код и делаю коммит разности a и b: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add -u + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m "code: вывод разности" +[main 7b2cbbd] code: вывод разности + 1 file changed, 2 insertions(+), 1 deletion(-) + +4.Игнорирование файлов +Создаю в CodeBlocks файл .gitignore, куда вписываю строки с названиями файлов, которые необходимо игнорировать. После создаю коммит: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add .gitignore +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m "git: игнорирование файлов" +[main 27clfa2] git: игнорирование файлов + 1 file changed, 4 insertions(+) + Create mode 100644 .gitignore + +Проверяю, чтобы необходимые файлы и каталоги не отображались: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +nothing to commit, working tree clean + +5.Просмотр истории +Работа с журналом репозитария +Команда git log --stat, которая показывает файлы, изменённые в коммитах: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --stat +commit 27c1fa292d25b7dc57956bd9f6cc0ae6a9aa3c6a (HEAD -> main) +Author: Alice (KoldinaAE) +Date: Sun Mar 16 21:18:46 2025 +0300 + + git: игнорирование файлов + + .gitignore | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f +Author: Alice (KoldinaAE) +Date: Sun Mar 16 20:52:39 2025 +0300 + + code: вывод разности + + main.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit ddf8503cd670ca685f305582933b86baf4a9883e +Author: Alice (KoldinaAE) +Date: Sun Mar 16 20:44:34 2025 +0300 + + code: вывод суммы + main.cpp | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +commit aabe4a41ff9c1e6440655326ef942fad47b7e76f +Author: Alice (KoldinaAE) +Date: Sun Mar 16 20:22:10 2025 +0300 + + build: добавлен файл проекта + + project.cbp | 40 ++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 40 insertions(+) + +commit ab3f27a5c577a4120e3dfce2e4354ae54b267d83 +Author: Alice (KoldinaAE) +Date: Sun Mar 16 19:54:10 2025 +0300 + + code: заготовка программы + + main.cpp | 9 +++++++++ + 1 file changed, 9 insertions(+) + +Для последнего коммита данная команда показывает: +1 строка - хэш коммита +2 строка - автор, +3 строка - дата и время создания +4 строка - комментарий +5 строка - файл, который был изменён, количество изменённых строчек +6 строчка - статистика изменений данных файлов + +Коммиты по теме build: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --grep "build:" +commit aabe4a41ff9c1e6440655326ef942fad47b7e76f +Author: Alice (KoldinaAE) +Date: Sun Mar 16 20:22:10 2025 +0300 + + build: добавлен файл проекта +Коммиты, затрагивающие project.cbp: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log -- project.cbp +commit aabe4a41ff9c1e6440655326ef942fad47b7e76f +Author: Alice (KoldinaAE) +Date: Sun Mar 16 20:22:10 2025 +0300 + + build: добавлен файл проекта + +Просмотр коммитов +Вывод предпоследнего коммита тремя способами: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git show HEAD~1 +commit 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f +Author: Alice (KoldinaAE) +Date: Sun Mar 16 20:52:39 2025 +0300 + + code: вывод разности + +diff --git a/main.cpp b/main.cpp +index 056d8a1..8435233 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; ++ cout << "A + B = " << a + b << '\n' ++ << "A - B = " << a - b << '\n'; + } + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git show main~1 +commit 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f +Author: Alice (KoldinaAE) +Date: Sun Mar 16 20:52:39 2025 +0300 + + code: вывод разности + +diff --git a/main.cpp b/main.cpp +index 056d8a1..8435233 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; ++ cout << "A + B = " << a + b << '\n' ++ << "A - B = " << a - b << '\n'; + } + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git show 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f +commit 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f +Author: Alice (KoldinaAE) +Date: Sun Mar 16 20:52:39 2025 +0300 + + code: вывод разности + +diff --git a/main.cpp b/main.cpp +index 056d8a1..8435233 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; ++ cout << "A + B = " << a + b << '\n' ++ << "A - B = " << a - b << '\n'; + } + +Просмотр изменений +Добавляю в main.cpp печать произведения чисел, смотрю изменения в рабочей копии с помощью команды git diff: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git diff +diff --git a/main.cpp b/main.cpp +index 8435233..f372c78 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'; + } +3 строка - файлы, которые сравнивает команда: a/main.cpp (старая версия файла) и b/main.cpp (новая версия файла) +4 строка - хэши старой и новой версий файла +7 строка - в каких строках произошли изменения и количество строк в старом и новом файлах +8 - 13 строка - показывает, что изменилось в строках, что осталось таким же + +Изменения между самым первым коммитом и коммитом, добавляющим вывод разности: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git diff ab3f27a5c577a4120e3dfce2e4354ae54b267d83 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f +diff --git a/main.cpp b/main.cpp +index 8e9eb8f..8435233 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 @@ ++ ++ ++ ++ ++ ++ + +6.Откат изменений +Создаю коммит изменённого кода с выводом произведения: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m "code: вывод суммы произведения" +[main e518ef6] code: вывод суммы произведения + 1 file changed, 2 insertions(+), 1 deletion(-) + +Отменяю этот коммит с помощью команды git reset: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git reset --hard HEAD~1 +HEAD is now at 27c1fa2 git: игнорирование файлов + +Добавляю над функцией main() комментарий, а затем убираю изменения в main.cpp другим способом — откатив этот файл к состоянию в последнем коммите (HEAD): +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git checkout HEAD -- main.cpp + +7.Обмен кодом через удалённое хранилище +Регистрируюсь на Git УИТ +Настройка SSH + Для загрузки данных в репозитарий GitHub будет использоваться протокол SSH. Поэтому для обмена данными с сервером нужно сгенерировать пару из открытого и закрытого ключей: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ ssh-keygen +Generating public/private ed25519 key pair. +Enter file in which to save the key (/c/Users/koldinad/.ssh/id_ed25519): +Created directory '/c/Users/koldinad/.ssh'. +Enter passphrase for "/c/Users/koldinad/.ssh/id_ed25519" (empty for no passphrase): +Enter same passphrase again: +Your identification has been saved in /c/Users/koldinad/.ssh/id_ed25519 +Your public key has been saved in /c/Users/koldinad/.ssh/id_ed25519.pub +The key fingerprint is: +SHA256:5XdOhO2pDS/hMY8PeRGw4Ifaz4UykKuadD5b+P4hl8w Arina@DESKTOP-NHR9C8F +The key's randomart image is: ++--[ED25519 256]--+ +| . . | +| o o = | +| o + + + | +| B . + o | +| S = B B | +| o o O ^ . | +| . + o E X * | +| . =.o o . = | +| o o+o.. . | ++----[SHA256]-----+ + +Вводить пароль каждый раз, когда используется ключ, неудобно. Использую программу-агент, которая работает в фоне и предоставляет ключи другим программам, в том числе git. Запускаю агент: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ eval $(ssh-agent -s) +Agent pid 810 + +Загружаю ключ: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ ssh-add +Enter passphrase for /c/Users/koldinad/.ssh/id_ed25519: +Identity added: /c/Users/koldinad/.ssh/id_ed25519 (Arina@DESKTOP-NHR9C8F) + +Открытый ключ, загружаю его в список открытых ключей своей учётной записи: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ cat ~/.ssh/id_ed25519.pub +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDzOwPn0lbfaMMtVTa6qxmE2KT28JfUCEu3GykM+Ywci Arina@DESKTOP-NHR9C8F + +Отправка проекта на сервер +Добавляю репозитарий и загружаю хранилище git на GitHub с помощью команды git push: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git remote add origin git@uit.mpei.ru:KoldinaAE/cs-lab02.git + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/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: 15, done. +Counting objects: 100% (15/15), done. +Delta compression using up to 20 threads +Compressing objects: 100% (13/13), done. +Writing objects: 100% (15/15), 2.05 KiB | 190.00 KiB/s, done. +Total 15 (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:KoldinaAE/cs-lab02.git + * [new branch] main -> main +branch 'main' set up to track 'origin/main'. + +Получение проекта с сервера +Клонирую проект на компьютер Боба: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob +$ git clone git@uit.mpei.ru:KoldinaAE/cs-lab02.git project +Cloning into 'project'... +Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519': +remote: Enumerating objects: 15, done. +remote: Counting objects: 100% (15/15), done. +remote: Compressing objects: 100% (13/13), done. +remote: Total 15 (delta 1), reused 0 (delta 0), pack-reused 0 +Receiving objects: 100% (15/15), done. +Resolving deltas: 100% (1/1), done. + +Перехожу в каталог проекта на компьютере Боба: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob +$ cd project +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ + +Настраиваю Git: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git config user.name 'Bob (KoldinaAE)' + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git config user.email 'arinakoldina@mail.ru' + +8.Совместная работа над проектом без конфликтов правок +«На машине Боба» добавляю в программу печать произведения чисел и делаю коммит: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git add main.cpp + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git commit -m "code: вывод произведения" +[main 1621872] code: вывод произведения + 1 file changed, 2 insertions(+), 1 deletion(-) + +Отправляю коммит на сервер: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git push +Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519': +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 20 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 416 bytes | 208.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:KoldinaAE/cs-lab02.git + 27c1fa2..1621872 main -> main + +«На машине Алисы» выполняю загрузку изменений: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/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), 396 bytes | 18.00 KiB/s, done. +From uit.mpei.ru:KoldinaAE/cs-lab02 + 27c1fa2..1621872 main -> origin/main + +Смотрю историю всех веток на компьютере Алисы: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --oneline --decorate --all --graph +* 1621872 (origin/main, origin/HEAD) code: вывод произведения +* 27c1fa2 (HEAD -> main) git: игнорирование файлов +* 7b2cbbd code: вывод разности +* ddf8503 code: вывод суммы +* aabe4a4 build: добавлен файл проекта +* ab3f27a code: заготовка программы + +Двигаю ветку main к скачанной версии: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git pull --ff-only +Updating 27c1fa2..1621872 +Fast-forward + main.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Убеждаюсь, что рабочая копия проекта у Алисы соответствует версии у Боба: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git pull +Already up to date. + +У Алисы добавляю в программу вывод деления, коммичу изменение и отправляю на сервер: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m "code: вывод деления" +[main 6b05c46] code: вывод деления + 1 file changed, 2 insertions(+), 1 deletion(-) + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 20 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 407 bytes | 407.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:KoldinaAE/cs-lab02.git + 1621872..6b05c46 main -> main + +Получаю новую версию на машине Боба: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git fetch +Enter passphrase for key '/c/Users/koldinad/.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), 387 bytes | 29.00 KiB/s, done. +From uit.mpei.ru:KoldinaAE/cs-lab02 + 1621872..6b05c46 main -> origin/main + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git pull --ff-only +Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519': +Updating 1621872..6b05c46 +Fast-forward + main.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git pull +Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519': +Already up to date. + +9.Разрешение конфликтов правок при совместной работе +Добавляю в код Алисы печать максимума, делаю коммит и отправляю на сервер: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: вывод максимума' +[main 348cd84] code: вывод максимума + 1 file changed, 2 insertions(+), 1 deletion(-) + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git push +Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519': +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 20 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 414 bytes | 138.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:KoldinaAE/cs-lab02.git + 6b05c46..348cd84 main -> main + +В код Боба добавляю печать минимума, делаю коммит и пытаюсь отправить его на сервер, вижу, что удалённый репозитарий не принимает изменений, так как коммит Боба основан не на последнем существующем коммите: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git add main.cpp + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git commit -m 'code: вывод минимума' +[main 8787111] code: вывод минимума + 1 file changed, 2 insertions(+), 1 deletion(-) + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git push +Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519': +To uit.mpei.ru:KoldinaAE/cs-lab02.git + ! [rejected] main -> main (fetch first) +error: failed to push some refs to 'uit.mpei.ru:KoldinaAE/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. + +От лица Боба загружаю коммиты и отображаю историю всех веток, виже, что ветка main локального репозитария разошлась с веткой main (origin/main) на сервере: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git fetch +Enter passphrase for key '/c/Users/koldinad/.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), 394 bytes | 20.00 KiB/s, done. +From uit.mpei.ru:KoldinaAE/cs-lab02 + 6b05c46..348cd84 main -> origin/main + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git log --oneline --decorate --all --graph +* 8787111 (HEAD -> main) code: вывод минимума +| * 348cd84 (origin/main, origin/HEAD) code: вывод максимума +|/ +* 6b05c46 code: вывод деления +* 1621872 code: вывод произведения +* 27c1fa2 git: игнорирование файлов +* 7b2cbbd code: вывод разности +* ddf8503 code: вывод суммы +* aabe4a4 build: добавлен файл проекта +* ab3f27a code: заготовка программы + +Перемещаю коммит Боба поверх коммита Алисы, то есть поверх (origin/main), но эта команда завершается ошибкой, сообщающей о конфликте в main.cpp: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main|MERGING) +$ git rebase origin/main +Auto-merging main.cpp +CONFLICT (content): Merge conflict in main.cpp +error: could not apply 8787111... 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 8787111... code: вывод минимума + +Убираю метки конфликта, и дорабатываю код так, чтобы программа компилировалась и работала. Затем загружаю изменения в индекс и продолжаю операцию git rebase, с помощью флага –continue: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git add main.cpp + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git rebase --continue +[detached HEAD 4090b2d] code: вывод минимума + 1 file changed, 1 insertion(+) +Successfully rebased and updated refs/heads/main. + +История хранилища теперь имеет желаемый вид: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git log --oneline --decorate --all --graph +* 4090b2d (HEAD -> main) code: вывод минимума +* 348cd84 (origin/main, origin/HEAD) code: вывод максимума +* 6b05c46 code: вывод деления +* 1621872 code: вывод произведения +* 27c1fa2 git: игнорирование файлов +* 7b2cbbd code: вывод разности +* ddf8503 code: вывод суммы +* aabe4a4 build: добавлен файл проекта +* ab3f27a code: заготовка программы + +Отправляю изменения на сервер: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main) +$ git push +Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519': +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 20 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 419 bytes | 209.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:KoldinaAE/cs-lab02.git + 348cd84..4090b2d main -> main + +10.Использование веток +На машине Алисы добавляю ветку double и переключаюсь на неё: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git branch double + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git checkout double +Switched to branch 'double' + +В коде заменяю тип переменных на double, делаю коммит: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (double) +$ git add main.cpp + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (double) +$ git commit -m "code: изменение типа переменных на double" +[double f129d47] code: изменение типа переменных на double + 1 file changed, 1 insertion(+), 1 deletion(-) + +Переключаюсь на ветку main и синхронизирую её: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (double) +$ git checkout main +Switched to branch 'main' +Your branch is up to date with 'origin/main'. + +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git fetch +Enter passphrase for key '/c/Users/koldinad/.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), 399 bytes | 28.00 KiB/s, done. +From uit.mpei.ru:KoldinaAE/cs-lab02 + 348cd84..4090b2d main -> origin/main + +Получаю одновременно две ветки: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --oneline --decorate --all --graph +* f129d47 (double) code: изменение типа переменных на double +| * 4090b2d (origin/main, origin/HEAD) code: вывод минимума +|/ +* 348cd84 (HEAD -> main) code: вывод максимума +* 6b05c46 code: вывод деления +* 1621872 code: вывод произведения +* 27c1fa2 git: игнорирование файлов +* 7b2cbbd code: вывод разности +* ddf8503 code: вывод суммы +* aabe4a4 build: добавлен файл проекта +* ab3f27a code: заготовка программы + +Cливаю эти ветки: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git merge double +Updating cffc65a..278681f +Fast-forward + main.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Отправляю изменения на сервер: +Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main) +$ git push +Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519': +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 20 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 415 bytes | 207.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:KoldinaAE/cs-lab02.git + 057accf..e3833c8 main -> main