diff --git a/README.md b/README.md new file mode 100644 index 0000000..ea650b7 --- /dev/null +++ b/README.md @@ -0,0 +1,624 @@ +# Отчет по лабораторной работе № 2 «Система контроля версий Git» + +Выполнил: Коваленко Д. М. \ +Группа: А-01-23 \ +Проверил: Козлюк Д. А. + +Примечание: работа выполнялась на MacBook в IDE VS Code, из-за этого нет файлов проекта и подключение к серверу кафедры производилось по HTTP. + +1. Создал в именной папке каталог lab_02 и запустил в нем консоль. + +2. Создал каталоги Алисы и Боба, каталог `project`. В процессе познакомился с `cd`: + +``` +vatarishin@MacBook-Air-Vatari lab_02 % mkdir alice +vatarishin@MacBook-Air-Vatari lab_02 % mkdir bob +vatarishin@MacBook-Air-Vatari lab_02 % cd alice +vatarishin@MacBook-Air-Vatari alice % mkdir project +vatarishin@MacBook-Air-Vatari alice % cd project +vatarishin@MacBook-Air-Vatari project % cd .. +vatarishin@MacBook-Air-Vatari alice % cd project +``` + +3. Инициализировал репозитарий: + +``` +vatarishin@MacBook-Air-Vatari project % git init +Initialized empty Git repository in /Users/vatarishin/lab_02/alice/project/.git/ +``` + +4. Поменял имя ветки и настроил имя пользователя и email + +``` +vatarishin@MacBook-Air-Vatari project % git branch -m main +vatarishin@MacBook-Air-Vatari project % git config user.name 'Alice (KovalenkoDM)' + +vatarishin@MacBook-Air-Vatari project % git config user.email 'kovalenkodm@mpei.ru' +``` + +5. Просмотрим статус репозитария + +``` +vatarishin@MacBook-Air-Vatari project % git status +On branch main + +No commits yet + +Untracked files: + (use "git add ..." to include in what will be committed) + main.cpp + +nothing added to commit but untracked files present (use "git add" to track) +``` + +Увидели, на какой ветке стоим, сообщение о том, что не было ни одного коммита, а так же файлы, которые присутствуют в каталоге, но не добавлены в git. + +6. Добавим main.cpp и повторим команду + +``` +vatarishin@MacBook-Air-Vatari project % git add main.cpp + +vatarishin@MacBook-Air-Vatari project % git status +On branch main + +No commits yet + +Changes to be committed: + (use "git rm --cached ..." to unstage) + new file: main.cpp +``` +`git status` показывает изменения, которые войдут в следующий коммит. Сейчас это только `main.cpp` + +7. Сделаем коммит + +``` +vatarishin@MacBook-Air-Vatari project % git commit -m 'code: заготовка программы' +[main (root-commit) 5f0ca26] code: заготовка программы + 1 file changed, 0 insertions(+), 0 deletions(-) + create mode 100644 main.cpp +``` + +8. Изменим `main.cpp`, добавив ввод, но не обновим этот файл в git. +Посмотрим статус репозитория: +``` +vatarishin@MacBook-Air-Vatari project % 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 + +no changes added to commit (use "git add" and/or "git commit -a") + +``` +Как можно видеть, стоим мы все так же на ветке `main`, однако уже нет файлов, не занесенных в git. +Так же видим, что подпись у `main.cpp` изменилась. Теперь он отмечен как `modified`, т.е. измененный, а не новый, как было ранее. + +9. Создадим коммит с вводом чисел и выводом суммы: + +``` +vatarishin@MacBook-Air-Vatari project % git add main.cpp + +vatarishin@MacBook-Air-Vatari project % git commit -m "Добавил вывод суммы" + +[main b6b4301] Добавил вывод суммы + 1 file changed, 9 insertions(+) +``` +Видим, что в коммит вошло 1 изменеие файла с 9 добавленными строками (`9 insertions(+)`) + +10. Добавим в программу вывод разности и сделаем коммит вторым указанным способом: + +``` +vatarishin@MacBook-Air-Vatari project % git add -u + +vatarishin@MacBook-Air-Vatari project % git commit -m "Добавил вывод разности" + +[main af0c01e] Добавил вывод разности + 1 file changed, 1 insertion(+), 1 deletion(-) + +vatarishin@MacBook-Air-Vatari project % git commit -a -m "fix" + +[main 00bf724] fix + 1 file changed, 1 insertion(+) +``` +Позже я заметил, что не дописал одну строчку в программе, пришлось коммитить отдельно. + +11. Создал файл `.gitignore` и занёс в него папку с кэшем `.vs`, а так же всё, что было создано при сборке программы. +Закоммитим. +``` +vatarishin@MacBook-Air-Vatari project % git add .gitignore +vatarishin@MacBook-Air-Vatari project % git commit -m "git" +[main 7af6274] git + 1 file changed, 3 insertions(+) + create mode 100644 .gitignore +``` +Теперь git не будет обращать внимание на указанные файлы и папку. + +12. Посмотрим историю коммитов в трёх исполнениях +Просто вывод, сжато и сжато+дерево + +``` +vatarishin@MacBook-Air-Vatari project % git log +commit 7af62747d777cd0f2e9b8c281abe2f77e8d49a26 (HEAD -> main) +Author: Alice (KovalenkoDM) +Date: Mon Mar 18 14:27:08 2024 +0300 + + git + + git + + +commit 00bf7248ebeb685f4a034b04e3c3f42e7a421948 +Author: Alice (KovalenkoDM) +Date: Mon Mar 18 14:20:24 2024 +0300 + + fix + +commit af0c01e8ca0d7373daade67acf31b70a3d4354a5 +Author: Alice (KovalenkoDM) +Date: Mon Mar 18 14:15:32 2024 +0300 + + Добавил вывод разности + +commit b6b4301d2d39fa81c8352e6ece575468654d9000 +Author: Alice (KovalenkoDM) +Date: Mon Mar 18 14:09:12 2024 +0300 + + Добавил вывод суммы + +commit 5f0ca265db41576cc65ea691eeda544f27f25d9c +Author: Alice (KovalenkoDM) +Date: Mon Mar 18 13:49:58 2024 +0300 + + +vatarishin@MacBook-Air-Vatari project % git log --oneline --decorate +7af6274 (HEAD -> main) git +00bf724 fix +af0c01e Добавил вывод разности +b6b4301 Добавил вывод суммы +5f0ca26 code: заготовка программы + + +vatarishin@MacBook-Air-Vatari project % git log --oneline --decorate --all --graph +* 7af6274 (HEAD -> main) git +* 00bf724 fix +* af0c01e Добавил вывод разности +* b6b4301 Добавил вывод суммы +* 5f0ca26 code: заготовка прогр +``` + +13. Введём `git log --stat` и посмотрим на вывод + +``` +vatarishin@MacBook-Air-Vatari project % git log --stat +commit 7af62747d777cd0f2e9b8c281abe2f77e8d49a26 (HEAD -> main) +Author: Alice (KovalenkoDM) +Date: Mon Mar 18 14:27:08 2024 +0300 + + git + + .gitignore | 3 +++ + 1 file changed, 3 insertions(+) +``` +Показывается хэш коммита, автор, точное время создания коммита, тема коммита, добавленный файл. +Так же видим сколько файлов изменено и сколько строк в этом файле добавлено + +14. Посмотрим предпоследний коммит + +``` +vatarishin@MacBook-Air-Vatari project % git show 00bf724 +commit 00bf7248ebeb685f4a034b04e3c3f42e7a421948 +Author: Alice (KovalenkoDM) +Date: Mon Mar 18 14:20:24 2024 +0300 + + fix + +diff --git a/main.cpp b/main.cpp +index ff97f51..b496f37 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -1,4 +1,5 @@ + #include ++using namespace std; + + int main() { + cout << "Enter A and B: "; + +``` +Показывается хэш, автор, дата, время, тема. Код программы: - означает удаление указанной строки, а + добавление + +15. Добавим печать произведения в программу, но коммитить пока не будем +Посмотрим изменения в рабочей копии + +``` +vatarishin@MacBook-Air-Vatari project % git diff +diff --git a/main.cpp b/main.cpp +index b496f37..eb39ee8 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -5,6 +5,8 @@ int main() { + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; +- cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n'; ++ cout << "A + B = " << a + b << '\n' ++ << "A - B = " << a - b << '\n' ++ << "A * B = " << a * b << '\n'; + return 0; + } +``` +Как можно видеть, вывод изменился. `-` показывает, какая сточка была удалена, а `+`, что было добавлено. +(В добавок ко всему я привел вывод к нужному виду) + +16. Посмотрим изменения между самым первым коммитом и коммитом, добавляющим вывод разности +Для этого используем хэши этих коммитов, которые написаны выше + +``` +vatarishin@MacBook-Air-Vatari project % git diff 5f0ca26 af0c01e +diff --git a/main.cpp b/main.cpp +index e69de29..ff97f51 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -0,0 +1,9 @@ ++#include ++ ++int main() { ++ cout << "Enter A and B: "; ++ int a, b; ++ cin >> a >> b; ++ cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n'; ++ return 0; ++} +``` +Поскольку изначально в файле ничего не было, видим только добавление строк + +17. Закоммитим изменения в рабочей копии (вывод произведения) + +``` +vatarishin@MacBook-Air-Vatari project % git add main.cpp +vatarishin@MacBook-Air-Vatari project % git commit -m "добавил вывод произведения" +[main 7273370] добавил вывод произведения + 1 file changed, 3 insertions(+), 1 deletion(-) +``` + +18. Откатимся к предпоследнему коммиту: + +``` +vatarishin@MacBook-Air-Vatari project % git reset --hard HEAD~1 +HEAD is now at 7af6274 git +``` + +19. Добавим над функцией main() комментарий и откатим этот файл к состоянию в последнем коммите: + +``` +vatarishin@MacBook-Air-Vatari project % git checkout HEAD -- main.cpp +``` + +20. Из-за того, что через mac не возможно подключится с помощью ssh ключа, поключимся к серверу с помощью протокола HTTP и запушим изменения на сервер + +``` +vatarishin@MacBook-Air-Vatari project % git remote set-url origin http://uit.mpei.ru/git/KovalenkoDM/cs-lab02.git +vatarishin@MacBook-Air-Vatari project % git push origin main -u +Username for 'http://uit.mpei.ru': KovalenkoDM +Password for 'http://KovalenkoDM@uit.mpei.ru': +Enumerating objects: 15, done. +Counting objects: 100% (15/15), done. +Delta compression using up to 8 threads +Compressing objects: 100% (9/9), done. +Writing objects: 100% (15/15), 1.38 KiB | 1.38 MiB/s, done. +Total 15 (delta 2), reused 0 (delta 0), pack-reused 0 +remote: . Processing 1 references +remote: Processed 1 references in total +To http://uit.mpei.ru/git/KovalenkoDM/cs-lab02.git + * [new branch] main -> main +branch 'main' set up to track 'origin/main'. +``` + +21. На машине Боба. +Клонируем репозитарий с облака, указав URL и папку +Перейдём в папку проекта + +``` +vatarishin@MacBook-Air-Vatari bob % git clone http://uit.mpei.ru/git/KovalenkoDM/cs-lab02.git project +Cloning into 'project'... +remote: Enumerating objects: 15, done. +remote: Counting objects: 100% (15/15), done. +remote: Compressing objects: 100% (9/9), done. +remote: Total 15 (delta 2), reused 0 (delta 0), pack-reused 0 +Receiving objects: 100% (15/15), done. +Resolving deltas: 100% (2/2), done. + +vatarishin@MacBook-Air-Vatari bob % cd project +``` + +22. Изменим имя пользователя и email + +``` +vatarishin@MacBook-Air-Vatari project % git config user.name ‘Bob (KovalenkoDM)' + +vatarishin@MacBook-Air-Vatari project % git config user.email 'kovalenkodm@mpei.ru' +``` + +23. Добавим вывод частного, закоммитим и отправим на сервер +Примечание: я перепутал порядок добавления частоного и произведения. Позже от лица Алисы будет закомичен вывод произведения + +``` +vatarishin@MacBook-Air-Vatari project % git commit -a -m "добавил вывод частного" +[main 61a74a7] добавил вывод частного + 1 file changed, 3 insertions(+), 1 deletion(-) + +vatarishin@MacBook-Air-Vatari project % git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 8 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 402 bytes | 402.00 KiB/s, done. +Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 +remote: . Processing 1 references +remote: Processed 1 references in total +To http://uit.mpei.ru/git/KovalenkoDM/cs-lab02.git + 7af6274..61a74a7 main -> main +``` + +24. На машине Алисы загрузим изменения Боба + +``` +vatarishin@MacBook-Air-Vatari project % 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), 382 bytes | 95.00 KiB/s, done. +From http://uit.mpei.ru/git/KovalenkoDM/cs-lab02 + 7af6274..61a74a7 main -> origin/main + +vatarishin@MacBook-Air-Vatari project % git log --oneline --decorate --all --graph +* 61a74a7 (origin/main) добавил вывод частного +* 7af6274 (HEAD -> main) git +* 00bf724 fix +* af0c01e Добавил вывод разности +* b6b4301 Добавил вывод суммы +* 5f0ca26 code: заготовка программы + +vatarishin@MacBook-Air-Vatari project % git pull --ff-only + +Updating 7af6274..61a74a7 +Fast-forward + main.cpp | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +``` +После введения первой команды земетим, что в рабочей копии изменений еще не произошло +Просмотрим историю и увидим, ветка `main` отстает на один коммит от ветки `origin/main` +Пододвинем `main` к скачанной версии + +25. Добавим в программу вывод произведения, закоммитим и отправим на сервер + +``` +vatarishin@MacBook-Air-Vatari project % git commit -a -m "добавил вывод произведения" +[main b8ceb47] добавил вывод произведения + 1 file changed, 1 insertion(+) + +vatarishin@MacBook-Air-Vatari project % git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 8 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 377 bytes | 377.00 KiB/s, done. +Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 +remote: . Processing 1 references +remote: Processed 1 references in total +To http://uit.mpei.ru/git/KovalenkoDM/cs-lab02.git + 61a74a7..b8ceb47 main -> main +``` + +26. У Боба. Загрузим изменения Алисы + +``` +vatarishin@MacBook-Air-Vatari project % git pull +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), 357 bytes | 22.00 KiB/s, done. +From http://uit.mpei.ru/git/KovalenkoDM/cs-lab02 + 61a74a7..b8ceb47 main -> origin/main +Updating 61a74a7..b8ceb47 +Fast-forward + main.cpp | 1 + + 1 file changed, 1 insertion(+) +``` + +27. У Алисы. Дополним программу выводом максимума, закоммитим и отправим на сервер + +``` +vatarishin@MacBook-Air-Vatari project % git commit -a -m "Добавил вывод максимума" +[main a89f5fb] Добавил вывод максимума + 1 file changed, 2 insertions(+), 1 deletion(-) +vatarishin@MacBook-Air-Vatari project % git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 8 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 412 bytes | 412.00 KiB/s, done. +Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 +remote: . Processing 1 references +remote: Processed 1 references in total +To http://uit.mpei.ru/git/KovalenkoDM/cs-lab02.git + b8ceb47..a89f5fb main -> main +``` + +28. На машине Боба: +Не обновляя локальный репозитарий, добавим вывод минимума, сделаем коммит и попытаемся отправить на сервер + +``` +vatarishin@MacBook-Air-Vatari project % git commit -a -m "добавил вывод минимума" +[main 6514e20] добавил вывод минимума + 1 file changed, 2 insertions(+), 1 deletion(-) +vatarishin@MacBook-Air-Vatari project % git push +To http://uit.mpei.ru/git/KovalenkoDM/cs-lab02.git + ! [rejected] main -> main (non-fast-forward) +error: failed to push some refs to 'http://uit.mpei.ru/git/KovalenkoDM/cs-lab02.git' +hint: Updates were rejected because the tip of your current branch is behind +hint: its remote counterpart. Integrate the remote changes (e.g. +hint: 'git pull ...') before pushing again. +hint: See the 'Note about fast-forwards' in 'git push --help' for details. +``` +Видно, что Git не дайт этого сделать, так как коммит Боба основан не на последнем существующем коммите + +29. Посмотрим всю историю коммитов, предварительно загрузим их + +``` +vatarishin@MacBook-Air-Vatari project % git fetch +vatarishin@MacBook-Air-Vatari project % git log --oneline --decorate --all --graph +* 6514e20 (HEAD -> main) добавил вывод минимума +| * a89f5fb (origin/main, origin/HEAD) Добавил вывод максимума +|/ +* b8ceb47 добавил вывод произведения +* 61a74a7 добавил вывод частного +* 7af6274 git +* 00bf724 fix +* af0c01e Добавил вывод разности +* b6b4301 Добавил вывод суммы +* 5f0ca26 code: заготовка программы +``` +Видно, что возник конфликт. Появилось две версии ветки `main` + +30. Попытаемся перенести коммит Боба поверх коммита Алисы, то есть поверх origin/main + +``` +vatarishin@MacBook-Air-Vatari project % git rebase origin/main + +Auto-merging main.cpp +CONFLICT (content): Merge conflict in main.cpp +error: could not apply 6514e20... добавил вывод минимума +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 6514e20... добавил вывод минимума +``` +Получаем сообщение о конфликте. Необходимо сначала привести код Боба к тому виду, как у Алисы, а потом добавлять его изменения +Сделаем это вручную + +31. После изменения кода нужно добавить файл и продолжить прерванную операцию rebase +После этого отправим изменения на сервер + +``` +vatarishin@MacBook-Air-Vatari project % git add main.cpp +git rebase --continue +[detached HEAD 82f9489] добавил вывод минимума + 1 file changed, 2 insertions(+), 1 deletion(-) +Successfully rebased and updated refs/heads/main. + +vatarishin@MacBook-Air-Vatari project % git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 8 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 413 bytes | 413.00 KiB/s, done. +Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 +remote: . Processing 1 references +remote: Processed 1 references in total +To http://uit.mpei.ru/git/KovalenkoDM/cs-lab02.git + a89f5fb..82f9489 main -> main +``` + +32. Перейдём на машину Алисы. Создадим ветку double и перейдём в неё + +``` +vatarishin@MacBook-Air-Vatari project % git branch double + +vatarishin@MacBook-Air-Vatari project % git checkout double + +Switched to branch 'double' +``` +Видим сообщение о том, что мы перешли на другую ветку + +33. Поменяем типы переменных на `double`, закомиттим и отправим на сервер + +``` +vatarishin@MacBook-Air-Vatari project % git commit -a -m "изменен тип файлов на double" +[double 9646d88] изменен тип файлов на double + 1 file changed, 1 insertion(+), 1 deletion(-) + +vatarishin@MacBook-Air-Vatari project % git pull +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), 393 bytes | 131.00 KiB/s, done. +From http://uit.mpei.ru/git/KovalenkoDM/cs-lab02 + a89f5fb..82f9489 main -> origin/main +Updating a89f5fb..82f9489 +Fast-forward + main.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) +``` +34. Перейдём в ветку main, синхронзируем репозитарии и посмотрим историю: + +``` +vatarishin@MacBook-Air-Vatari project % git log --oneline --decorate --all --graph +* 9646d88 (double) изменен тип файлов на double +| * 82f9489 (HEAD -> main, origin/main) добавил вывод минимума +|/ +* a89f5fb Добавил вывод максимума +* b8ceb47 добавил вывод произведения +* 61a74a7 добавил вывод частного +* 7af6274 git +* 00bf724 fix +* af0c01e Добавил вывод разности +* b6b4301 Добавил вывод суммы +* 5f0ca26 code: заготовка программы +``` +Видим две вещи: +1) Версия кода Алисы совпадает с версией кода Боба. +2) коммит с хэшем `9646d88`, в котором мы меняли тип переменной в другой ветке + +35. Сольём ветку `double` с главной + +``` +vatarishin@MacBook-Air-Vatari project % git merge double + +Auto-merging main.cpp +Merge made by the 'ort' strategy. + main.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) +``` + +36. Попытаемся отправить изменения на сервер, т.к. ранее мы видели, что версии ветки `main` совпадают всё происходит без проблем. + +``` +vatarishin@MacBook-Air-Vatari project % git push +Enumerating objects: 10, done. +Counting objects: 100% (10/10), done. +Delta compression using up to 8 threads +Compressing objects: 100% (6/6), done. +Writing objects: 100% (6/6), 700 bytes | 700.00 KiB/s, done. +Total 6 (delta 2), reused 0 (delta 0), pack-reused 0 +remote: . Processing 1 references +remote: Processed 1 references in total +To http://uit.mpei.ru/git/KovalenkoDM/cs-lab02.git + 82f9489..fcad405 main -> main +``` + +37. Посмотрим историю всех веток репозитария + +``` +vatarishin@MacBook-Air-Vatari project % git log --oneline --decorate --all --graph +* fcad405 (HEAD -> main, origin/main) Merge branch 'double' Мерджим ветки +|\ +| * 9646d88 (double) изменен тип файлов на double +* | 82f9489 добавил вывод минимума +|/ +* a89f5fb Добавил вывод максимума +* b8ceb47 добавил вывод произведения +* 61a74a7 добавил вывод частного +* 7af6274 git +* 00bf724 fix +* af0c01e Добавил вывод разности +* b6b4301 Добавил вывод суммы +* 5f0ca26 code: заготовка программы +``` +Видно, что два предпоследних коммита находятся в другой ветке +А последний коммит — слияние веток