Загрузил(а) файлы в ''

Подловченко ДД А-01-24
main
PodlovchenkoDD 1 месяц назад
Родитель f02ac5078e
Сommit 0cc2f7b235

@ -0,0 +1,437 @@
Отчет по лабораторной работе № 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 <file>..." 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 <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: main.cpp
Untracked files:
(use "git add <file>..." 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) <PodlovchenkoDD@mpei.ru>
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) <PodlovchenkoDD@mpei.ru>
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 <iostream>
+
+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) <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) <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 коммитов, потому что много раз делал повторные действия)
Загрузка…
Отмена
Сохранить