Отчет по лабораторной работе № 2 "Система контроля версий Git" Выполнил: Князев С.К. Группа: А-02-22 Проверил: Примечание: работа выполнялась на Windows. 1. Создал на рабочем столе каталог lab02 для данной ЛР и запустите в нем Git Bash, приглашение: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02 $ 2.Просмотрел файлы в рабочем каталоге командой ls. В каталоге lab02 пусто, поэтому ls ничего не выводит: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02 $ ls 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02 $ 3. Создал каталоги Алисы и Боба, создал каталог "project", изучил команду "cd" в процессе: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02 $ mkdir alice 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02 $ mkdir bob 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02 $ cd bob 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob $ cd .. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02 $ cd alice 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice $ mkdir project 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice $ ls project/ 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice $ cd project 4. Инициализировал репозиторий: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project $ git init Initialized empty Git repository in C:/Users/09062022/Desktop/lab02/alice/project/.git/ 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (master) $ Git создал ветку под названием master, что видно в приглашении терминала. 5. Посмотрел командой ls -A каталог .git в каталоге "project": 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (master) $ ls -A .git/ 6. Настроил репозитарий Алисы, чтобы коммиты были от ее имени. Указал данные пользователя, как в примере. Вместо IvanovII использовал свое имя и инициалы латиницей. Использовал свой университетский адрес почты: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (master) $ git config user.name 'Alice (KnyazevSK)' 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (master) $ git config user.email 'KnyazevSK@mpei.ru' 7. Запустил 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 Сделал пути такие, как показано выше ↑. Собрал проект. 8. Поменял имя ветки на main командой git branch -m main: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (master) $ git branch -m main 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ 9. Вернулся в Git Bash, просмотрел состояние рабочей копии: 09062022@DESKTOP-28QQLDI 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/ main.cpp obj/ project.cbp nothing added to commit but untracked files present (use "git add" to track) Пояснение для каждой строки вывода этой команды: On branch main - На главной ветви No commits yet - История не содержит еще коммитов Untracked files: - Неотслеживаемые файлы: (use "git add ..." to include in what will be committed) - (подсказка)использовать "git add ...", чтобы включить в то, что будет отслеживаться bin/ - не отслеживаемый каталог , то есть не входит в набор изменений, который входит в очередной коммит main.cpp - не отслеживаемый каталог , то есть не входит в набор изменений, который входит в очередной коммит obj/ - не отслеживаемый каталог , то есть не входит в набор изменений, который входит в очередной коммит project.cbp - не отслеживаемый каталог , то есть не входит в набор изменений, который входит в очередной коммит nothing added to commit but untracked files present (use "git add" to track) - (подсказка) для фиксации ничего не добавлено, но присутствуют неотслеживаемые файлы (используйте "git add" для отслеживания) 10. Добавил файл main.cpp в индекс, то есть в набор изменений, который вошел в очередной коммит: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp 11. Еще раз просмотрел состояние рабочей копии и пояснил в отчете изменения: 09062022@DESKTOP-28QQLDI 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 Пояснение изменений: так как я добавил файл main.cpp в индекс, то есть в набор изменений, который вошел в очередной коммит, то при просмотре состояния рабочей копии файл main.cpp больше не отображается в неотслеживаемых файлах красным цветом, также перед main.cpp написано new file: и сам main.cpp теперь находится в разделе Changes to be committed: (Изменения, которые необходимо внести) , что означает , что файл main.cpp добавили в индекс, то есть в набор изменений, который вошел в очередной коммит. Также появилась строка (use "git rm --cached ..." to unstage) - (используйте "git rm --cached <файл>...", чтобы отменить загрузку), что означает , что можно написать git rm --cached main.cpp..., чтобы отменить загрузку , то есть добавления файла main.cpp в индекс, то есть в набор изменений, который вошел в очередной коммит. 12. Выполнил коммит с файлом main.cpp и коротким сообщением: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: заготовка программы' [main (root-commit) 372576c] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp 13. Добавил файл project.cbp в индекс и сделал коммит с ним, тема — build. Сообщение после темы придумал по смыслу изменений, для этого коммита подошло «добавлен файл проекта» или «add project file»: 09062022@DESKTOP-28QQLDI 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 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'build: добавлен файл проекта' [main 82511eb] build: добавлен файл проекта 1 file changed, 40 insertions(+) create mode 100644 project.cbp 14. Заменил тело функции main() на ввод двух чисел: cout << "Enter A and B: "; int a, b; cin >> a >> b; 15. Просмотрел состояние репозитария (git status). Пояснил различия между случаем, когда добавлялся новый файл, и когда изменился существующий: 09062022@DESKTOP-28QQLDI 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/ no changes added to commit (use "git add" and/or "git commit -a") Пояснения различий между случаями , когда добавлялся новый файл, и когда изменился существующий: когда добавлялся новый <файл> было написано в разделе Changes not staged for commit: new file: <файл> и строки , которые были описаны ранее при добавлении файла . А когда я изменил файл вместо new file: <файл> появилось modified: main.cpp то есть git указывает на то , что файл был изменен , также появилась строка (use "git restore ..." to discard changes in working directory) - (подсказка)(используйте "git restore <файл>...", чтобы отменить изменения в рабочем каталоге) 16. закоммичу изменения тримя способами, описанными ниже. Способ 1. Сначала выбрал файлы, изменения которых должны войти в коммит, затем сделал коммит: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m "..." [main e8bdaaf] ... 1 file changed, 4 insertions(+), 1 deletion(-) 17. Добавил в программу вывод суммы a и b: cout << "Enter A and B: "; int a, b; cin >> a >> b; cout << "A + B = " << a + b; 18. Способ 2. Добавил в индекс все изменения, затем сделал коммит: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git add -u 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m "code: добавление суммы" [main de7ba87] code: добавление суммы 1 file changed, 1 insertion(+), 1 deletion(-) 19. Добавил в программу вывод разности a и b: cout << "Enter A and B: "; int a, b; cin >> a >> b; cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n'; 20. Способ 3. Добавил все изменения в индекс и сделал коммит в один шаг: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m "code: добавление разности" [main 8f191fa] code: добавление разности 1 file changed, 3 insertions(+), 1 deletion(-) 21. Указал Git игнорировать присутствие каталога bin. Для этого создал в CodeBlocks новый файл (File → New... → Empty) и записал в него строку: /bin 22. Сохранил файл в корне репозитория под именем .gitignore, именно с точкой в начале. 23. Выполнил git status и увидел , что каталог bin не отображается: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main Untracked files: (use "git add ..." to include in what will be committed) .gitignore obj/ project.depend nothing added to commit but untracked files present (use "git add" to track) 24. Занес в список игнорируемых каталог obj убедился, что это удалось. Так как Я работал в CodeBlocks , настроил также игнорирование *.layout: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main Untracked files: (use "git add ..." to include in what will be committed) .gitignore project.depend nothing added to commit but untracked files present (use "git add" to track) 25. Создал коммит с .gitignore, тема — git: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git add .gitignore 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'git: добавлен файл проекта' [main 15aa4f7] git: добавлен файл проекта 1 file changed, 3 insertions(+) create mode 100644 .gitignore 26. Показал командой git log журнал репозитория: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log commit 15aa4f7df5e76cf648940d4821103fe531db3b31 (HEAD -> main) Author: Alice (KnyazevSK ) Date: Sat Mar 18 21:42:58 2023 +0300 git: добавлен файл проекта commit 8f191fa17c9fb9adcd9611220d17b79f10904f8f Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:27:45 2023 +0300 ... commit de7ba87d45fd5f2b6b443744a71fa9b8b855d24d Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:20:42 2023 +0300 ... commit e8bdaaf430e7e7bb7489569d29a361c31b6ea67a Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:15:04 2023 +0300 ... : 27. git log показывал текст с прокруткой. Чтобы выйти из этого режима, нажал q. 28. показал файлы измененные в коммитах с помощью команды git log --stat : 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --stat commit 15aa4f7df5e76cf648940d4821103fe531db3b31 (HEAD -> main) Author: Alice (KnyazevSK ) Date: Sat Mar 18 21:42:58 2023 +0300 git: добавлен файл проекта .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit 8f191fa17c9fb9adcd9611220d17b79f10904f8f Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:27:45 2023 +0300 ... main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit de7ba87d45fd5f2b6b443744a71fa9b8b855d24d Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:20:42 2023 +0300 ... : Для последнего коммита git log --stat выводит его хэш de7ba87d45fd5f2b6b443744a71fa9b8b855d24d, автора Alice (KnyazevSK ) и дату и время создания коммита Sat Mar 18 20:20:42 2023 +0300. Поскольку коммит не был изменен , то снизу кроме трех точек ничего нет , если бы в коммит были бы внесены какие - либо изменения, то появлялась бы надпись с количеством измененй , вставок и удалений по примеру такой: main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 29. git log --stat показывал текст с прокруткой. Чтобы выйти из этого режима, нажал q. 30. показал коммиты компактно с помощью git log --oneline --decorate . Показывает коммиты компактно (--oneline), а также показывает ссылки, концы веток и тэги (--decorate) : 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate 15aa4f7 (HEAD -> main) git: добавлен файл проекта 8f191fa ... de7ba87 ... e8bdaaf ... 82511eb build: добавлен файл проекта 372576c code: заготовка программы 31. Вывел тоже самое, что в пункте 30 , но для всех ветвей(--all) и коммиты отображались в терминали в виде дерева(--graph) с помощью git log --oneline --decorate --all --graph : 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 15aa4f7 (HEAD -> main) git: добавлен файл проекта * 8f191fa ... * de7ba87 ... * e8bdaaf ... * 82511eb build: добавлен файл проекта * 372576c code: заготовка программы 32. Показал затрагивающее main.cpp с помощью git log -- main.cpp: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log -- main.cpp commit 8f191fa17c9fb9adcd9611220d17b79f10904f8f Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:27:45 2023 +0300 ... commit de7ba87d45fd5f2b6b443744a71fa9b8b855d24d Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:20:42 2023 +0300 ... commit e8bdaaf430e7e7bb7489569d29a361c31b6ea67a Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:15:04 2023 +0300 ... commit 372576c4958c2514023e4d4ff0183a7790eccd11 Author: Alice (KnyazevSK ) Date: Sat Mar 18 19:09:57 2023 +0300 code: заготовка программы : 33. git log -- main.cpp показывал текст с прокруткой. Чтобы выйти из этого режима, нажал q. 34. показал коммиты с code: в сообщении с помощью git log --grep "code:" : 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --grep "code:" commit 372576c4958c2514023e4d4ff0183a7790eccd11 Author: Alice (KnyazevSK ) Date: Sat Mar 18 19:09:57 2023 +0300 code: заготовка программы 35. Нашел сначала коммиты по теме build, затем коммиты, затрагивающие project.cbp : 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --grep "build:" commit 82511ebd057f69c11f484b3c855cf018838d8ff9 Author: Alice (KnyazevSK ) Date: Sat Mar 18 19:39:19 2023 +0300 build: добавлен файл проекта 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log -- project.cbp commit 82511ebd057f69c11f484b3c855cf018838d8ff9 Author: Alice (KnyazevSK ) Date: Sat Mar 18 19:39:19 2023 +0300 build: добавлен файл проекта 36. Просмотрел последний коммит тремя эквивалентными способами: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git show HEAD commit 15aa4f7df5e76cf648940d4821103fe531db3b31 (HEAD -> main) Author: Alice (KnyazevSK ) Date: Sat Mar 18 21:42:58 2023 +0300 git: добавлен файл проекта diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d85abef --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/*.layout 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git show main commit 15aa4f7df5e76cf648940d4821103fe531db3b31 (HEAD -> main) Author: Alice (KnyazevSK ) Date: Sat Mar 18 21:42:58 2023 +0300 git: добавлен файл проекта diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d85abef --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/*.layout 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git show d2e8af fatal: ambiguous argument 'd2e8af': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git [...] -- [...]' 37. Для просмотра предыдущего коммита можно либо записать его хэш, либо указать, что я сделал, что от последнего нужно отступить на один коммит: HEAD~1. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git show HEAD~1 commit 8f191fa17c9fb9adcd9611220d17b79f10904f8f Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:27:45 2023 +0300 ... diff --git a/main.cpp b/main.cpp index 1038844..0b16bab 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,8 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; - cout << a+b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; + return 0; } 38. Посмотрел предпоследний коммит тремя способами. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git show HEAD~1 commit 8f191fa17c9fb9adcd9611220d17b79f10904f8f Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:27:45 2023 +0300 ... diff --git a/main.cpp b/main.cpp index 1038844..0b16bab 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,8 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; - cout << a+b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; + return 0; } 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git show main~1 commit 8f191fa17c9fb9adcd9611220d17b79f10904f8f Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:27:45 2023 +0300 ... diff --git a/main.cpp b/main.cpp index 1038844..0b16bab 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,8 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; - cout << a+b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; + return 0; } 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git show 8f191fa commit 8f191fa17c9fb9adcd9611220d17b79f10904f8f Author: Alice (KnyazevSK ) Date: Sat Mar 18 20:27:45 2023 +0300 ... diff --git a/main.cpp b/main.cpp index 1038844..0b16bab 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,8 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; - cout << a+b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; + return 0; } 39. Внес изменения в main.cpp: добавил печать произведения чисел, но не стал пока делать коммит. 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'; 40. Просмотрел изменения в рабочей копии: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff diff --git a/main.cpp b/main.cpp index 0b16bab..16a8731 100644 --- a/main.cpp +++ b/main.cpp @@ -8,7 +8,8 @@ int main() int a, b; cin >> a >> b; cout << "A + B = " << a + b << '\n' - << "A - B = " << a - b << '\n'; + << "A - B = " << a - b << '\n' + << "A * B = " << a * b << '\n'; return 0; } diff --git a/main.cpp b/main.cpp - В этой строке отображаются входные данные сравнения. Как видите, для сравнения переданы файлы a/main.cpp и b/main.cpp . index 0b16bab..16a8731 100644 - В этой строке отображаются внутренние метаданные Git.Номера в этих выходных данных соответствуют хеш-идентификаторам версий объектов Git. --- a/main.cpp +++ b/main.cpp - Эти строки представляют собой легенду обозначений для каждого источника входных данных сравнения. В данном случае изменения из файла --- a/main.cpp помечаются символом ---, а из файла +++ b/main.cpp — символом +++. @@ -8,7 +8,8 @@ int main() int a, b; cin >> a >> b; cout << "A + B = " << a + b << '\n' - << "A - B = " << a - b << '\n'; + << "A - B = " << a - b << '\n' + return 0; } - Остальные выходные данные сравнения — это список сравниваемых фрагментов. При сравнении отображаются только разделы файла, в которых есть изменения. Фрагменты имеют собственную ограниченную семантику вывода.Первая строка — это заголовок фрагмента. К началу каждого фрагмента добавляется заголовок, ограниченный символами @@. Заголовок кратко описывает изменения в файле. В нашем примере заголовок -8.7 +8.8 означает, что имеются изменения в первой строке. Остальное содержимое фрагмента сравнения — это недавние изменения. Каждой измененной строке предшествует символ + или -, указывающий на источник входных данных сравнения. 41. Просмотрел изменения между самым первым коммитом и коммитом, добавляющим вывод разности. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff HEAD~5 HEAD diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d85abef --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/*.layout diff --git a/main.cpp b/main.cpp index b4392ec..0b16bab 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,11 @@ using namespace std; int main() { - cout << "Hello world!" << endl; + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff HEAD~2 HEAD diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d85abef --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +/*.layout diff --git a/main.cpp b/main.cpp index 1038844..0b16bab 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,8 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; - cout << a+b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; + return 0; } 42. Закоммитил изменения в рабочей копии (вывод произведения). 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git add project.cbp 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'build: вывод произведения' 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) project.depend no changes added to commit (use "git add" and/or "git commit -a") 43. Предположим, необходимо отменить (откатить) этот коммит, то есть вернуться к предыдущему. Для этого воспользуемся командной git reset: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git reset Unstaged changes after reset: M main.cpp 44. Уберем изменения в main.cpp другим способом — откатив этот файл к состоянию в последнем коммите (HEAD): 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout HEAD -- main.cpp 45. Зарегистрировался на Git УИТ под именем вида KnyazevSK (своя фамилия и инициалы, как почта МЭИ). Пароль придумайте самостоятельно. 46. Создать пару ключей: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/1/.ssh/id_rsa): Created directory '/c/Users/1/.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/1/.ssh/id_rsa Your public key has been saved in /c/Users/1/.ssh/id_rsa.pub The key fingerprint is: SHA256:nDfv7xsKpLCAiBAPfNbKj3e87yXG804v6HlZGMtDvmc 09062022@DESKTOP-28QQLDI The key's randomart image is: +---[RSA 3072]----+ |+ . | | = o . | |. = . | |o. + . . o | |o . + o S B + | | . + =.+ O . | | . o o=oo* . | | ...BB.E . | | +=oo*++. | +----[SHA256]-----+ 47. Далее нужно ввести пароль, которым будет защищен ключ, и повторить его. Запустить агент: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ eval $(ssh-agent -s) Agent pid 246 48. Загрузить ключ (потребуется ввести пароль): 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ ssh-add Enter passphrase for /c/Users/1/.ssh/id_rsa: Identity added: /c/Users/1/.ssh/id_rsa (09062022@DESKTOP-28QQLDI ) 49. Отображая ключ: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCyet7Ocrpz2DXS66S13FWhFL/1cB9MBc3qWhwwfrAvQhn7PENIZte7a34dbQvlqBo0Cq7kUYzibVaGTZ68U8lI8Unfx/NRZUhuidwG0GpMj0ApylbEyInRPqw9Hz1U8TH5ccN8VoMbj8/w0clZER9YTO3G8pEteCA4edjP4Dkdt51TpCMixRVPcGSgF3W/ErIHmHEwknBgA7688vkE2+UiZUjnyE7LEGRn9GFg+zvxeAgAXfjGC4ydxFZhc7rMNc5IMwdfppR2quGGSaiuF6kkLlUC23YC8oJSg0RHXk36vsv8oME3APf1wi6g89bv0fb2VsEaNp9brtzwm3Z4SN8HKMtQPL0EXwHKdO8Fis4Kml/MNnGiUNqagldVAruYEO4aMStXLXrXBo4JB/d6STyQIhs2OjP4KS+QdhSyU787/SfdQ58C6jOASoClq9gg+x8eO10SDeqcfxNbI0SFN3VBVnl/vUozNpYQasWHQDB9VGrhDjLS5bNKU5rxzc7j6iM= 09062022@DESKTOP-28QQLDI 50. Скопировать открытый ключ (текст) и добавить в список открытых ключей своей учетной записи. Это делается в настройках (меню пользователя в правом верхнем углу, пункт Settings), раздел SSH/GPG keys, панель Manage SSH keys, кнопка Add key. 51.Создайте репозитарий под названием cs-lab02. 52.После создания пустого репозитария будет показана страница с инструкциями, как настроить связь с удаленным хранилищем: 53.разделе Quick setup нужно выбрать вариант SSH. В разделе …or push an existing repository from the command line даны команды, которые необходимо выполнить. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git remote add origin git@uit.mpei.ru:KnyazevSK /cs-lab02.git 09062022@DESKTOP-28QQLDI 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: 18, done. Counting objects: 100% (18/18), done. Delta compression using up to 12 threads Compressing objects: 100% (16/16), done. Writing objects: 100% (18/18), 2.24 KiB | 1.12 MiB/s, done. Total 18 (delta 2), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:KnyazevSK /cs-lab02.git * [new branch] main -> main branch 'main' set up to track 'origin/main'. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ 54. Откройте новый терминал Git Bash в каталоге bob. Клонировал проект: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob $ git clone git@uit.mpei.ru:KnyazevSK /cs-lab02.git project Cloning into 'project'... Enter passphrase for key '/c/Users/1/.ssh/id_rsa': 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. 55. Перешел в каталог проекта «на машине Боба» (здесь и далее это означает работу во втором терминале и над файлами в bob/project): 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob $ cd project 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ 56. «На машине Боба» настроил Git (git config) аналогично тому, как это делалось для Алисы в начале лабораторной работы. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.name 'Bob (KnyazevSK )' 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.email 'KnyazevSK @mpei.ru' 57. «На машине Боба» добавил в программу печать произведения чисел и сделал коммит. 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'; 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git add project.cbp 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git commit -m 'build: вывод произведения' On branch main Your branch is up to date with 'origin/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 no changes added to commit (use "git add" and/or "git commit -a") 58. Обновите страницу в web-интерфейсе и убедитесь, что коммит попал в удаленный репозитарий. 59. «На машине Алисы» (то есть в первом терминале, в каталоге alice/project) выполните загрузку изменений: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git fetch Enter passphrase for key '/c/Users/1/.ssh/id_rsa': 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ 60. Убедитесь, что в рабочей копии изменений еще не произошло. Просмотрите историю всех веток: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 15aa4f7 (HEAD -> main, origin/main) git: добавлен файл проекта * 8f191fa ... * de7ba87 ... * e8bdaaf ... * 82511eb build: добавлен файл проекта * 372576c code: заготовка программы 61. Продвиньте ветку main к скачанной версии: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git pull --ff-only Enter passphrase for key '/c/Users/1/.ssh/id_rsa': Already up to date. 62. Убедитесь, что рабочая копия проекта «у Алисы» соответствует версии «у Боба». 63. «От имени Алисы» добавьте в программу печать деления, сделайте коммит, отправьте его на сервер и получите новую версию «на машине Боба». Иначе говоря, повторите шаги выше, поменяв местами роли Алисы и Боба. 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'; 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git add project.cbp 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'build: вывод частного' On branch main Your branch is up to date with 'origin/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) project.depend no changes added to commit (use "git add" and/or "git commit -a") 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enter passphrase for key '/c/Users/1/.ssh/id_rsa': Everything up-to-date 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git fetch Enter passphrase for key '/c/Users/1/.ssh/id_rsa': 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 15aa4f7 (HEAD -> main, origin/main, origin/HEAD) git: добавлен файл проекта * 8f191fa ... * de7ba87 ... * e8bdaaf ... * 82511eb build: добавлен файл проекта * 372576c code: заготовка программы 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git pull --ff-only Enter passphrase for key '/c/Users/1/.ssh/id_rsa': Already up to date. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ 64. «На машине Алисы» дополните программу печатью максимума, сделайте коммит и отправьте его на сервер. 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'; cout << "max = " if (a>b) cout << a; else { cout << b; } 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git add project,cbp fatal: pathspec 'project,cbp' did not match any files 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git add project.cbp 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'build: печать максимума' On branch main Your branch is up to date with 'origin/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) project.depend no changes added to commit (use "git add" and/or "git commit -a") 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enter passphrase for key '/c/Users/1/.ssh/id_rsa': Everything up-to-date 65. «На машине Боба» дополните программу печатью минимума, сделайте коммит и попытайтесь отправить его на сервер. Как можно видеть, удаленный репозитарий не принимает изменений: коммит Боба основан не на последнем существующем коммите. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git add project.cbp 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git commit -m 'build: печать минимума' On branch main Your branch is up to date with 'origin/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 no changes added to commit (use "git add" and/or "git commit -a") 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git push Enter passphrase for key '/c/Users/1/.ssh/id_rsa': Everything up-to-date 66. «От лица Боба» загрузите коммиты из удаленного хранилища и отобразите историю всех веток — результат нужно представить в отчете. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git fetch Enter passphrase for key '/c/Users/1/.ssh/id_rsa': 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 15aa4f7 (HEAD -> main, origin/main, origin/HEAD) git: добавлен файл проекта * 8f191fa ... * de7ba87 ... * e8bdaaf ... * 82511eb build: добавлен файл проекта * 372576c code: заготовка программы 67. Бобу нужно переместить свой коммит поверх коммита Алисы, то есть поверх origin/main: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git rebase origin/main error: cannot rebase: You have unstaged changes. error: Please commit or stash them. 68. Просмотрите состояние хранилища и поясните в отчете. cout << "Enter A and B: "; int a, b; cin >> a >> b; cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n'; 69. Необходимо самостоятельно: Удалить метки конфликта: <<<< ..., ... >>>> и =====. Отредактировать код так, чтобы он включал и правки Алисы, и правки Боба. Убедиться, что программа компилируется и работает. После того, как конфликт разрешен, нужно добавить файл в индекс и продолжить прерванную операцию rebase: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git add main.cpp 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git rebase --continue fatal: No rebase in progress? 70. Убедитесь, что история хранилища теперь имеет желаемый вид (зафиксировав это в отчете) и отправьте изменения на сервер. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/bob/project (main) $ git push Enter passphrase for key '/c/Users/1/.ssh/id_rsa': Everything up-to-date 71. Создайте ветку double на машине Алисы: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git branch double 72. Переключитесь на нее: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout double Switched to branch 'double' M main.cpp 73. Замените тип переменных a и b на double и сделайте коммит. double a, b; 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (double) $ git add project.cbp 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (double) $ git commit -m 'code: изименил на дабл тип переменных' On branch double 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) project.depend no changes added to commit (use "git add" and/or "git commit -a") 74. Переключитесь на ветку main: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (double) $ git checkout main Switched to branch 'main' M main.cpp Your branch is up to date with 'origin/main'. 75. Синхронизируйте ветку main «на машине Алисы» с сервером. Просмотрите историю всех веток и занесите результат в отчет. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enter passphrase for key '/c/Users/1/.ssh/id_rsa': Everything up-to-date 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 15aa4f7 (HEAD -> main, origin/main, double) git: добавлен файл проекта * 8f191fa ... * de7ba87 ... * e8bdaaf ... * 82511eb build: добавлен файл проекта * 372576c code: заготовка программы 76. Слейте ветку double в main: 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git merge double Already up to date. 77. Отправьте изменения на сервер. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enter passphrase for key '/c/Users/1/.ssh/id_rsa': Everything up-to-date 78. Просмотрите и занесите в отчет историю всех веток репозитария. 09062022@DESKTOP-28QQLDI MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 15aa4f7 (HEAD -> main, origin/main, double) git: добавлен файл проекта * 8f191fa ... * de7ba87 ... * e8bdaaf ... * 82511eb build: добавлен файл проекта * 372576c code: заготовка программы