Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

625 строки
25 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Отчет по лабораторной работе № 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 <file>..." 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 <file>..." 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 <file>..." to update what will be committed)
(use "git restore <file>..." 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) <kovalenkodm@mpei.ru>
Date: Mon Mar 18 14:27:08 2024 +0300
git
git
commit 00bf7248ebeb685f4a034b04e3c3f42e7a421948
Author: Alice (KovalenkoDM) <kovalenkodm@mpei.ru>
Date: Mon Mar 18 14:20:24 2024 +0300
fix
commit af0c01e8ca0d7373daade67acf31b70a3d4354a5
Author: Alice (KovalenkoDM) <kovalenkodm@mpei.ru>
Date: Mon Mar 18 14:15:32 2024 +0300
Добавил вывод разности
commit b6b4301d2d39fa81c8352e6ece575468654d9000
Author: Alice (KovalenkoDM) <kovalenkodm@mpei.ru>
Date: Mon Mar 18 14:09:12 2024 +0300
Добавил вывод суммы
commit 5f0ca265db41576cc65ea691eeda544f27f25d9c
Author: Alice (KovalenkoDM) <kovalenkodm@mpei.ru>
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) <kovalenkodm@mpei.ru>
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) <kovalenkodm@mpei.ru>
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 <iostream>
+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 <iostream>
+
+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 <conflicted_files>", 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: заготовка программы
```
Видно, что два предпоследних коммита находятся в другой ветке
А последний коммит — слияние веток