Отчет по лабораторной работе № 2 "Система контроля версий Git" Выполнил: Подловченко Д. Д. Группа: А-01-24 Проверил: Козлюк Д. А. Примечание: работа выполнялась на Windows. 1. Создал на рабочем столе каталог lab02 и запустил в нем Git Bash, приглашение: Admin@zhi-es MINGW64 ~/Desktop/lab02 $ 2. Просмотрел файлы в рабочем каталоге командой "ls" --- пусто: Admin@zhi-es MINGW64 ~/Desktop/lab02 $ ls Admin@zhi-es MINGW64 ~/Desktop/lab02 $ 3. Создал каталоги Алисы и Боба, создал каталог "project", изучил команду "cd" в процессе: Admin@zhi-es MINGW64 ~/Desktop/lab02 $ mkdir alice mkdir bob Admin@zhi-es MINGW64 ~/Desktop/lab02 $ cd alice Admin@zhi-es MINGW64 ~/Desktop/lab02/alice $ mkdir project Admin@zhi-es MINGW64 ~/Desktop/lab02/alice $ cd project Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project $ cd .. Admin@zhi-es MINGW64 ~/Desktop/lab02/alice $ cd project Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project $ 4. Инициализировал репозитарий: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project $ git init Initialized empty Git repository in C:/Users/Admin/Desktop/lab02/alice/project/.git/ Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ сообщение-подсказку, строки которого начинаются с hint: не выдало, поэтому менять название на main буду позже 5. Настроил репозитарий Алисы, чтобы коммиты были от ее имени: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git config user.name 'Alice (PodlovchenkoDD)' Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git config user.email 'PodlovchenkoDD@mpei.ru' Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ 6. Запустил CodeBlocks и создал проект в репозитарии Алисы, Resulting filename: "C:\Users\Admin\Desktop\lab02\alice\project\project.cbp", Собрал проект и на этом этапе структура файлов следующая: lab02 ├── alice │   └── project <--------- текущий рабочий каталог │   ├── .git <--------- создан командой "git init" │   ├── bin <--------- создан CodeBlocks при сборке │   ├── obj <--------- (то же самое) │   ├── main.cpp <-- код программы │   └── project.cbp <-- файл проекта └── bob 7. Вернувшись в Git Bash, просмотрел состояние рабочей копии: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git status On branch master 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) Данные строки показывают, что пока не существует коммитов и есть не отслеживаемые файлы, которые пока не индексированы. 8. Начинаю отслеживать "main.cpp", добавляя файл в индекс и выполняю коммит с файлом main.cpp и коротким сообщением:: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git add main.cpp Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git commit -m 'code: заготовка программы' [master (root-commit) 814a45e] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp 9. Заменил тело функции main() на ввод двух чисел, пересобрал и увидел различие: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git status On branch master Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: main.cpp Untracked files: (use "git add ..." to include in what will be committed) bin/ obj/ project.cbp no changes added to commit (use "git add" and/or "git commit -a") Появилось уведомление, что "main.cpp" модифицировался и просит использовать другую команду, чтобы занести изменения в репозиторий 10. Занёс все нужные файлы в .gitignore и закоммитил его с заголовком "git": Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git add .gitignore Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git commit -m "git" [master 79acfbc] git 1 file changed, 3 insertions(+) create mode 100644 .gitignore Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ 11. Попробовав все вариации команд git log, в частности git log --stat: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git log --stat commit 79acfbc5460e6b1320fef4b339237d0d7eb775a4 (HEAD -> master) Author: Alice (PodlovchenkoDD) Date: Sun Mar 23 19:24:08 2025 +0300 git .gitignore | 3 +++ 1 file changed, 3 insertions(+) Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ команда выводит хэш коммита -> автора -> дату -> содержимое коммита -> -> название и количество затронутых файлов 12. Посмотрел предпоследний коммит с помощью команды git show HEAD~1: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git show HEAD~1 commit 814a45e6ab5c823aea95d0b93aae7481724b71e9 Author: Alice (PodlovchenkoDD) Date: Sun Mar 23 18:16:06 2025 +0300 code: заготовка программы diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..b4392ec --- /dev/null +++ b/main.cpp @@ -0,0 +1,9 @@ +#include + +using namespace std; + +int main() +{ + cout << "Hello world!" << endl; + return 0; +} 13. Внес изменения в main.cpp: добавил печать произведения чисел, но не стал пока делать коммит. С помощью git diff получил: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (master) $ git diff diff --git a/main.cpp b/main.cpp index b4392ec..64da2d3 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,11 @@ using namespace std; int main() { - cout << "Hello world!" << endl; - return 0; + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n' + << "A * B = " << a * b << '\n'; + } Как видно команда отображает какие строки исчезли(-) и какие прибавились(+), так же хэш последнего коммита. 14. Успешно подключил рабочую версию к удалённой, отправил проект на сервер... 15. Получил проект с помощью git clone в папку боба и зарегистрировался(git config) от имени боба: Admin@zhi-es MINGW64 ~/Desktop/lab02/bob/project (main) $ git clone git@uit.mpei.ru:PodlovchenkoDD/cs-lab02.git project Admin@zhi-es MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.name "Bob (PodlovchenkoDD)" Admin@zhi-es MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.email "PodlovchenkoDD@mpei.ru" 16. Отправил коммит с произведением от имени боба на сервер с помощью git push и принял изменения от имени Алисы с помощью git fetch: Боб: Admin@zhi-es MINGW64 ~/Desktop/lab02/bob/project (main) $ git push Enter passphrase for key '/c/Users/Admin/.ssh/id_ed25519': Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 365 bytes | 365.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:PodlovchenkoDD/cs-lab02.git ccc711f..ce2e41a main -> main Алиса: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (main) $ git fetch Enter passphrase for key '/c/Users/Admin/.ssh/id_ed25519': remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 345 bytes | 11.00 KiB/s, done. From uit.mpei.ru:PodlovchenkoDD/cs-lab02 ccc711f..ce2e41a main -> origin/main 17. Просмотрел историю всех веток(git log --oneline --decorate --all --graph) и подвинул ветку main к скачанной версии(git pull --ff-only): Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * ce2e41a (origin/main, origin/HEAD) code: произведение после ошибки * ccc711f (HEAD -> main) добавление proj * 3075de5 code: без произведения перед бобом * 5c5d769 first commit * ca1511a (master) code:вывод произведения * 79acfbc git * 814a45e code: заготовка программы Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (main) $ git pull --ff-only Enter passphrase for key '/c/Users/Admin/.ssh/id_ed25519': Updating ccc711f..ce2e41a Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 18. Перешёл к "Разрешение конфликтов правок при совместной работе", синхронизировал у обоих пользователей: cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n' << "A * B = " << a * b << '\n' << "A / B = " << a / b << '\n'; 19. После добавления в код минимума(Алиса) и максимума(боб), после отправки на сервер возникла ожидаемая ошибка, git rebase origin/main и после git show HEAD можем заметить: Admin@zhi-es MINGW64 ~/Desktop/lab02/bob/project (main) $ git show HEAD commit e64fb31d7e1cc64f067052811999a092cc9a7306 (HEAD -> main) Author: Bob (PodlovchenkoDD) Date: Mon Mar 24 15:49:52 2025 +0300 Добавление максимума от лица боба diff --git a/main.cpp b/main.cpp index 38bc977..2f6e5f4 100644 --- a/main.cpp +++ b/main.cpp @@ -11,4 +11,13 @@ int main() << "A - B = " << a - b << '\n' << "A * B = " << a * b << '\n' << "A / B = " << a / b << '\n'; + if(a > b){ + cout << "Max: " << a << '\n'; + } + if(b > a){ + cout << "Max: " << b << '\n'; + } + else{ + cout << "Max: " << a << b << '\n'; + } То есть последний коммит на вывод максимума 20. После выхода из состояния rebase(git add main.cpp git rebase --continue) и редактирования файла получаем: Admin@zhi-es MINGW64 ~/Desktop/lab02/bob/project (main) $ git show HEAD commit 32f18606672dd7f3fb41694b7ba161c7798b7274 (HEAD -> main) Author: Bob (PodlovchenkoDD) Date: Mon Mar 24 15:49:52 2025 +0300 Добавление максимума от лица боба diff --git a/main.cpp b/main.cpp index 5d5692a..d6dbc1d 100644 --- a/main.cpp +++ b/main.cpp @@ -11,6 +11,7 @@ int main() << "A - B = " << a - b << '\n' << "A * B = " << a * b << '\n' << "A / B = " << a / b << '\n'; + if(a < b){ cout << "Min: " << a << '\n'; } @@ -19,5 +20,15 @@ int main() } else{ cout << "Min: " << a << b << '\n'; + + if(a > b){ + cout << "Max: " << a << '\n'; + } + if(b > a){ + cout << "Max: " << b << '\n'; + } + else{ + cout << "Max: " << a << b << '\n'; + } } 21. История всех веток после замены типа на double у Алисы: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * d48e22d (double) А и б теперь double | * 32f1860 (origin/main, origin/HEAD) Добавление максимума от лица боба |/ * da101ef (HEAD -> main) Добавление минимума для Алисы * d9df2c2 Разрешение конфликтов правок * ce2e41a code: произведение после ошибки * ccc711f добавление proj * 3075de5 code: без произведения перед бобом * 5c5d769 first commit * ca1511a (master) code:вывод произведения * 79acfbc git * 814a45e code: заготовка программы 22. 1)После создания ветки double, переключаемся на неё: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (main) $ git branch double Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout double Switched to branch 'double' 2)Далее меняю тип данных на double и переключаюсь обратно на main. 3)После слияниe (git merge double): Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (main) $ git merge double Updating da101ef..d48e22d Fast-forward main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 4)отправляю новый коммит: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enter passphrase for key '/c/Users/Admin/.ssh/id_ed25519': To uit.mpei.ru:PodlovchenkoDD/cs-lab02.git Enter passphrase for key '/c/Users/Admin/.ssh/id_ed25519': Auto-merging main.cpp Merge made by the 'ort' strategy. main.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) 5)Отправляю последний коммит со всеми изменениями и сверяю логи: Admin@zhi-es MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * f02ac50 (HEAD -> main) Merge branch 'main' of uit.mpei.ru:PodlovchenkoDD/cs-lab02 |\ | * 32f1860 (origin/main, origin/HEAD) Добавление максимума от лица боба * | d48e22d (double) А и б теперь double |/ * da101ef Добавление минимума для Алисы * d9df2c2 Разрешение конфликтов правок * ce2e41a code: произведение после ошибки * ccc711f добавление proj * 3075de5 code: без произведения перед бобом * 5c5d769 first commit * ca1511a (master) code:вывод произведения * 79acfbc git * 814a45e code: заготовка программы Всего получилось 11 коммитов, потому что много раз делал повторные действия)