Отчёт по лабораторной работе №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