diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..9003aab --- /dev/null +++ b/README.txt @@ -0,0 +1,1129 @@ +Отчет по лабораторной работе № 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: заготовка программы +