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

897 строки
39 KiB
Markdown

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

# Отчет по лабораторной работе № 2 «Система контроля версий Git»
Выполнил: Гордиевских Д. А. \
Группа: А-01-23 \
Проверил: Козлюк Д. А.
Примечание: работа выполнялась на Windows в IDE Visual studio 2022.
Это значит, что на этапе добавления файлов проекта будет добавлено больше файлов
1. Создал на рабочем столе каталог LABA2 и запустил в нем Git Bash, приглашение:
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2
$
```
2. Просмотрел файлы в рабочем каталоге можно командой `ls` — пусто:
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2
$ ls
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2
$
```
3. Создал каталоги Алисы и Боба, создал каталог `project`,
изучил команду `cd` в процессе:
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2
$ mkdir alice
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2
$ mkdir bob
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2
$ cd alice/
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice
$ mkdir project
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice
$ cd project/
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project
$ cd ..
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice
$ cd project/
```
4. Инициализировал репозитарий:
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project
$ git init
Initialized empty Git repository in C:/Users/gorda/OneDrive/Рабочий стол/LABA2/alice/project/.git/
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (master)
```
У меня имя ветки по умолчанию не настроено.
Git создал ветку под названием `master`, что видно в приглашении терминала.
Подсказка о смене ветки не появилась. Позже имя ветки будет изменено на `main`
5. Настраиваем имя пользователя и email
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (master)
$ git config user.name "Alice (GordiyevskikDA)"
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (master)
$ git config user.email "gordiyevskikda@mpei.ru"
```
6. Просмотрим статус репозитария
```
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.vs/
main.cpp
main.sln
main.vcxproj
main.vcxproj.filters
main.vcxproj.user
nothing added to commit but untracked files present (use "git add" to track)
```
В ветке MASTER отсутствуют коммиты. Приведён список файлов, незанесённых под контроль версий
Подсказка: Для добавления файлов нужно написать команду из скобок
7. Добавим main.cpp и посмотрим статус репозитария
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (master)
$ git add main.cpp
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: main.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
.vs/
main.sln
main.vcxproj
main.vcxproj.filters
main.vcxproj.user
```
Git status показывает, что в изменениях для следующего коммита присутствует новый файл main.cpp
8. Закоммитим main.cpp
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (master)
$ git commit -m 'code: заготовка программы'
[master (root-commit) 6f61cde] code: заготовка программы
1 file changed, 20 insertions(+)
create mode 100644 main.cpp
```
9. Переименуем ветку из master в main
Добавим под контроль версий файлы проекта. Т.к используется VS, необходимо добавить 4 файла
И, соответственно, сразу создаём коммит "code:..."
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (master)
$ git branch -m main
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git add main.sln
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git add main.vcxproj
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git add main.vcxproj.filters
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git add main.vcxproj.user
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git commit -m 'biuld: добавлены файлы проекта'
[main ff38e89] biuld: добавлены файлы проекта
4 files changed, 192 insertions(+)
create mode 100644 main.sln
create mode 100644 main.vcxproj
create mode 100644 main.vcxproj.filters
create mode 100644 main.vcxproj.user
```
10. Изменим main.cpp, добавив ввод, но не обновим этот файл в git.
Посмотрим статус репозитория:
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ 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
Untracked files:
(use "git add <file>..." to include in what will be committed)
.vs/
no changes added to commit (use "git add" and/or "git commit -a")
```
Видим, что в ветке main есть изменения не поставленные в очередь коммита,
т.е изменённые: main.cpp.
Если файл изменён, пишется "MODIFIED", если добавлен "New file"
11. Создадим коммит с вводом чисел:
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git add main.cpp
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git commit -m "code: Добавлена сумма"
[main 8691b4c] code: Добавлена сумма
1 file changed, 6 insertions(+), 16 deletions(-)
```
Здесь я написал неправильную тему коммита: случайно посмотрел на следующий шаг с суммой
Т.к VS 2022 в новом проекте создаёт текстовые подсказки, соответственно, они были добавлены при первом коммите
"16 deletions(-)" означает, что я стёр эти 16 строк подсказок от VS
12. Добавим в программу вывод суммы и сделаем коммит, а потом и разность:
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git add -u
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git commit -m "code: Теперь точно сумма"
[main 8420143] code: Теперь точно сумма
1 file changed, 1 insertion(+)
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git commit -a -m "code: Вывод разности"
[main 666c1db] code: Вывод разности
1 file changed, 1 insertion(+), 1 deletion(-)
```
13. Создал файл .gitignore и занёс в него сначала "/x64" и "IgnoreMe.txt"
Между занесениями вводил git status
Также внесём в git данный файл
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
.vs/
nothing added to commit but untracked files present (use "git add" to track)
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
.vs/
nothing added to commit but untracked files present (use "git add" to track)
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git add .gitignore
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git commit -m "git: Добавлен gitignore"
[main 47a638a] git: Добавлен gitignore
1 file changed, 2 insertions(+)
create mode 100644 .gitignore
```
Теперь в git не будут заноситься каталог /x64 и IgnoreMe.txt
14. Посмотрим историю коммитов в трёх исполнениях
Просто вывод, сжато и сжато+дерево
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git log
commit 47a638ac2e5b67440d3b54789198e27d6f0b96a6 (HEAD -> main)
Author: Alice (GordiyevskikDA) <gordiyevskikda@mpei.ru>
Date: Sat Feb 24 08:06:21 2024 +0300
git: Добавлен gitignore
commit 666c1db22fe3d91cbbdfa0e5f5bfe57422085a44
Author: Alice (GordiyevskikDA) <gordiyevskikda@mpei.ru>
Date: Sat Feb 24 08:03:11 2024 +0300
code: Вывод разности
commit 8420143b31550bed0968db18177865aa4abd663c
Author: Alice (GordiyevskikDA) <gordiyevskikda@mpei.ru>
Date: Sat Feb 24 08:02:25 2024 +0300
code: Теперь точно сумма
commit 8691b4cd655d37576450d0c7f1c13f25443d21b1
Author: Alice (GordiyevskikDA) <gordiyevskikda@mpei.ru>
Date: Sat Feb 24 08:01:13 2024 +0300
code: Добавлена сумма
commit ff38e89c0504016c1e017d7a0a92036a71024ba8
Author: Alice (GordiyevskikDA) <gordiyevskikda@mpei.ru>
Date: Sat Feb 24 07:58:44 2024 +0300
biuld: добавлены файлы проекта
commit 6f61cde9d24a041fa32fd9a7dc0bdd84c5413d54
Author: Alice (GordiyevskikDA) <gordiyevskikda@mpei.ru>
Date: Sat Feb 24 07:57:05 2024 +0300
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git log --oneline --decorate
47a638a (HEAD -> main) git: Добавлен gitignore
666c1db code: Вывод разности
8420143 code: Теперь точно сумма
8691b4c code: Добавлена сумма
ff38e89 biuld: добавлены файлы проекта
6f61cde code: заготовка программы
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git log --oneline --decorate --all --graph
* 47a638a (HEAD -> main) git: Добавлен gitignore
* 666c1db code: Вывод разности
* 8420143 code: Теперь точно сумма
* 8691b4c code: Добавлена сумма
* ff38e89 biuld: добавлены файлы проекта
* 6f61cde code: заготовка программы
```
15. Введём git log --stat и посмотрим, что он скажет относительно последнего коммита
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git log --stat
commit 47a638ac2e5b67440d3b54789198e27d6f0b96a6 (HEAD -> main)
Author: Alice (GordiyevskikDA) <gordiyevskikda@mpei.ru>
Date: Sat Feb 24 08:06:21 2024 +0300
git: Добавлен gitignore
.gitignore | 2 ++
1 file changed, 2 insertions(+)
```
Показывается хэш коммита, кто его сделал, точное время создания коммита с часовым поясом,
тема коммита, добавленный файл. Показывается, сколько файлов изменено и сколько строк в этом файле вставлено
16. Посмотрим коммиты с темой "build" и коммиты, относящиеся к main.cpp
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git log -- main.sln
commit ff38e89c0504016c1e017d7a0a92036a71024ba8
Author: Alice (GordiyevskikDA) <gordiyevskikda@mpei.ru>
Date: Sat Feb 24 07:58:44 2024 +0300
biuld: добавлены файлы проекта
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git log --grep "biuld"
commit ff38e89c0504016c1e017d7a0a92036a71024ba8
Author: Alice (GordiyevskikDA) <gordiyevskikda@mpei.ru>
Date: Sat Feb 24 07:58:44 2024 +0300
biuld: добавлены файлы проекта
```
17. Посмотрим предпоследний коммит
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git show HEAD~1
commit 666c1db22fe3d91cbbdfa0e5f5bfe57422085a44
Author: Alice (GordiyevskikDA) <gordiyevskikda@mpei.ru>
Date: Sat Feb 24 08:03:11 2024 +0300
code: Вывод разности
diff --git a/main.cpp b/main.cpp
index 74516c3..8b0c291 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,5 @@ int main()
cout << "Enter A and B: ";
int a, b;
cin >> a >> b;
- cout << "A + B = " << a + b << '\n';
+ cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n';
}
\ No newline at end of file
```
Показывается хэш, автор, дата, время, тема. Код программы: - означает удаление указанной строки, а + добавление
18. Добавим печать произведения в программу но не станем пока делать коммит
Посмотрим изменения в рабочей копии
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git diff
diff --git a/main.cpp b/main.cpp
index 8b0c291..6192c68 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,5 @@ 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';
}
\ No newline at end of file
```
Показывается хэш, автор, дата, время, тема. Код программы: - означает удаление указанной строки, а + добавление
19. Посмотрим изменения между самым первым коммитом и коммитом, добавляющим вывод разности
Для этого используем хэши этих коммитов, которые написаны сильно выше
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git diff 6f61cde 666c1db
diff --git a/main.cpp b/main.cpp
index 8118e09..8b0c291 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,20 +1,11 @@
-// main.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
-//
+#include <iostream>
-#include <iostream>
+using namespace std;
int main()
{
- std::cout << "Hello World!\n";
-}
-
-// Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
-// Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
-
-// Советы по началу работы
-// 1. В окне обозревателя решений можно добавлять файлы и управлять ими.
-// 2. В окне Team Explorer можно подключиться к системе управления версиями.
-// 3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
-// 4. В окне "Список ошибок" можно просматривать ошибки.
-// 5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
-// 6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
+ cout << "Enter A and B: ";
+ int a, b;
+ cin >> a >> b;
+ cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n';
+}
```
Перед первым коммитом я не почистил cpp файл от подсказок IDE. Видно, что потом они были удалены
6f61cde — хэш самого первого коммита, а 666c1db — коммита вывода разности
20. Закоммитим изменения в рабочей копии (вывод произведения)
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git add main.cpp
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git commit -m "code: вывод произведения"
[main 2c1b088] code: вывод произведения
1 file changed, 1 insertion(+), 1 deletion(-)
```
21. Откатимся к предпоследнему коммиту:
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git reset --hard HEAD~1
HEAD is now at 47a638a git: Добавлен gitignore
```
22. Добавим над функцией main() комментарий и Уберем изменения в main.cpp другим способом — откатив этот файл к состоянию в последнем коммите (HEAD):
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git checkout HEAD -- main.cpp
```
23. Сгенерируем приватный ключ для gitea на сайте кафедры
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ ssh-keygen
Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/gorda/.ssh/id_ed25519):
........
```
24. Запустим ssh-agent и загрузим ключ
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ eval $(ssh-agent -s)
Agent pid 660
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ ssh-add
Identity added: /c/Users/gorda/.ssh/id_ed25519 (gorda@DESKTOP-2IL75KC)
```
25. После добавления открытого ключа в профиль на git сайта кафедры связываем локальный и удалённый репозитарий и отправляем всё в облако
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git remote add origin http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git push -u origin main
Enumerating objects: 21, done.
Counting objects: 100% (21/21), done.
Delta compression using up to 8 threads
Compressing objects: 100% (19/19), done.
Writing objects: 100% (21/21), 4.55 KiB | 1.51 MiB/s, done.
Total 21 (delta 7), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
```
26. На машине Боба.
Клонируем репозитарий с облака, указав URL и папку
Перейдём в папку проекта
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob
$ git clone http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git project
Cloning into 'project'...
remote: Enumerating objects: 24, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 24 (delta 9), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (24/24), 4.81 KiB | 2.41 MiB/s, done.
Resolving deltas: 100% (9/9), done.
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob
$ cd project/
```
27. Настроим локальный репозитарий для Боба
Изменим имя пользователя и email
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ git config user.name "Bob (GordiyevskikDA)"
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ git config user.email "gordiyevskikda@mpei.ru"
```
28. Добавим печать произведения, сделаем коммит и отправим на сервер
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ git add main.cpp
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ git commit -m "code: Добавил произведение"
[main fa9ce57] code: Добавил произведение
1 file changed, 1 insertion(+), 1 deletion(-)
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ 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), 337 bytes | 337.00 KiB/s, done.
Total 3 (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/GordiyevskikDA/cs-lab02.git
20f7ad4..fa9ce57 main -> main
```
29. На машине Алисы загрузим изменения Боба
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ 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 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 317 bytes | 31.00 KiB/s, done.
From http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02
20f7ad4..fa9ce57 main -> origin/main
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git log --oneline --decorate --all --graph
* fa9ce57 (origin/main) code: Добавил произведение
* 20f7ad4 (HEAD -> main) code: Вывод произведения
* 47a638a git: Добавлен gitignore
* 666c1db code: Вывод разности
* 8420143 code: Теперь точно сумма
* 8691b4c code: Добавлена сумма
* ff38e89 biuld: добавлены файлы проекта
* 6f61cde code: заготовка программы
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git pull --ff-only
Updating 20f7ad4..fa9ce57
Fast-forward
main.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
```
После введения первой команды земетим, что в рабочей копии изменений еще не произошло
Просмотрим историю и увидим, ветка main отстает на один коммит от ветки origin/main (версии ветки main из удаленного репозитария под названием origin, то есть на сервере).
Пододвинем Main к скачанной версии
29. Добавим в программу печать деления, сделаем коммит и отправим на сервер
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git add main.cpp
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git commit -m "code: Добавил частное"
[main 22dd72f] code: Добавил частное
1 file changed, 1 insertion(+), 1 deletion(-)
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ 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), 358 bytes | 358.00 KiB/s, done.
Total 3 (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/GordiyevskikDA/cs-lab02.git
fa9ce57..22dd72f main -> main
```
30. У Алисы. Дополним программу печатью максимума, сделаем коммит и отправим на сервер
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git add main.cpp
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git commit -m "code: Добавлена печать максимума"
[main 92284ce] code: Добавлена печать максимума
1 file changed, 6 insertions(+)
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ 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), 390 bytes | 390.00 KiB/s, done.
Total 3 (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/GordiyevskikDA/cs-lab02.git
22dd72f..92284ce main -> main
```
31. На машине Боба:
Не обновляя локальный репозитарий, добавим печать минимума, сделаем коммит и попытаемся отправить на сервер
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ git add main.cpp
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ git commit -m "code: Добавлена печать минимума"
[main debe504] code: Добавлена печать минимума
1 file changed, 6 insertions(+)
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ git push
To http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
```
Видно, что Git не дайт этого сделать, так как коммит Боба основан не на последнем существующем коммите
32. Посмотрим всю историю коммитов, предварительно загрузим их
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ 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 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 370 bytes | 37.00 KiB/s, done.
From http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02
22dd72f..92284ce main -> origin/main
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ git log --oneline --decorate --all --graph
* debe504 (HEAD -> main) code: Добавлена печать минимума
| * 92284ce (origin/main, origin/HEAD) code: Добавлена печать максимума
|/
* 22dd72f code: Добавил частное
* fa9ce57 code: Добавил произведение
* 20f7ad4 code: Вывод произведения
* 47a638a git: Добавлен gitignore
* 666c1db code: Вывод разности
* 8420143 code: Теперь точно сумма
* 8691b4c code: Добавлена сумма
* ff38e89 biuld: добавлены файлы проекта
* 6f61cde code: заготовка программы
```
Видно, что возник конфликт коммитов. Это можно понять по символам "|" перед последним удачно отправленным коммитом
33. Попытаемся перенести коммит Боба поверх коммита Алисы, то есть поверх origin/main
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ git rebase origin/main
Auto-merging main.cpp
CONFLICT (content): Merge conflict in main.cpp
error: could not apply debe504... code: Добавлена печать минимума
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 debe504... code: Добавлена печать минимума
```
На что получаем сообщение о конфликте кода. Необходимо сначала привести код Боба к тому виду, как у Алисы, а потом добавлять его функцию
Сделаем это вручную. VS 2022 подсвечивает места конфликтов версий
34. После изменения кода нужно добавить файл в индекс и продолжить прерванную операцию rebase, а также отправим изменения на сервер:
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main|REBASE 1/1)
$ git add main.cpp
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main|REBASE 1/1)
$ git rebase --continue
hint: Waiting for your editor to close the file... 0 [sig] bash 926! sigpacket::process: Suppressing signal 18 to win32 process (pid 20196)
[detached HEAD cdf30fd] code: Добавлена печать минимума
1 file changed, 6 insertions(+)
Successfully rebased and updated refs/heads/main.
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/bob/project (main)
$ 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), 363 bytes | 363.00 KiB/s, done.
Total 3 (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/GordiyevskikDA/cs-lab02.git
92284ce..cdf30fd main -> main
```
35. Перейдём на машину Алисы. Создадим ветку double и перейдём в неё
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git branch double
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git checkout double
Switched to branch 'double'
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (double)
$
```
Видим, что приглашение в командной строке изменилось. "(main)" стало "(double)"
36. Перейдём в ветку main, синхронзируем репозитарии и посмотрим историю:
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (double)
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ 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 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 343 bytes | 31.00 KiB/s, done.
From http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02
92284ce..cdf30fd main -> origin/main
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git log --oneline --decorate --all --graph
* dbeedcb (double) code: Изменён тип переменной
| * cdf30fd (origin/main) code: Добавлена печать минимума
|/
* 92284ce (HEAD -> main) code: Добавлена печать максимума
* 22dd72f code: Добавил частное
* fa9ce57 code: Добавил произведение
* 20f7ad4 code: Вывод произведения
* 47a638a git: Добавлен gitignore
* 666c1db code: Вывод разности
* 8420143 code: Теперь точно сумма
* 8691b4c code: Добавлена сумма
* ff38e89 biuld: добавлены файлы проекта
* 6f61cde code: заготовка программы
```
Видим две вещи:
1) Версия кода Алисы не совпадает с версией кода Боба. Т.к. перед созданием ветки мы не сделали обновление локального репозитария
2) коммит с хэшем "dbeedcb", в котором мы меняли тип переменной в другой ветке
37. Сольём ветку double с главной
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git merge double
Updating 92284ce..dbeedcb
Fast-forward
main.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
```
38. Попытаемся отправить изменения на сервер
Но т.к. существует конфликт версий, о котором я писал в шаге 36, получаем ошибку
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git push
To http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. If you want to integrate the remote changes,
hint: use 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
```
Для исправления переключлся в ветку double, добавил правки Боба, создал коммит и отправил на сервер
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git checkout double
Switched to branch 'double'
M main.cpp
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (double)
$ git add main.cpp
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (double)
$ git commit -m "code: Изменён тип переменной (double)"
[double ad91778] code: Изменён тип переменной (double)
1 file changed, 6 insertions(+)
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (double)
$ git checkout main
Switched to branch 'main'
Your branch and 'origin/main' have diverged,
and have 1 and 1 different commits each, respectively.
(use "git pull" if you want to integrate the remote branch with yours)
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git merge double
Updating dbeedcb..ad91778
Fast-forward
main.cpp | 6 ++++++
1 file changed, 6 insertions(+)
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git push
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 8 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 802 bytes | 802.00 KiB/s, done.
Total 7 (delta 5), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02.git
cdf30fd..d77ebc2 main -> main
```
По причине того, что я не удалил коммит, который был сделан для кода бз правок Боба, но с изменением переменной Алисы,
Он тоже загрузился на сервер, но его сразу перекрыл нужный.
39. Посмотрим историю всех веток репозитария
```
gorda@DESKTOP-2IL75KC MINGW64 ~/OneDrive/Рабочий стол/LABA2/alice/project (main)
$ git log --oneline --decorate --all --graph
* d77ebc2 (HEAD -> main, origin/main) merge branch 'main' of http://uit.mpei.ru/git/GordiyevskikDA/cs-lab02
|\
* | ad91778 (double) code: Изменён тип переменной (double)
* | dbeedcb code: Изменён тип переменной
|/
* cdf30fd code: Добавлена печать минимума
* 92284ce code: Добавлена печать максимума
* 22dd72f code: Добавил частное
* fa9ce57 code: Добавил произведение
* 20f7ad4 code: Вывод произведения
* 47a638a git: Добавлен gitignore
* 666c1db code: Вывод разности
* 8420143 code: Теперь точно сумма
* 8691b4c code: Добавлена сумма
* ff38e89 biuld: добавлены файлы проекта
* 6f61cde code: заготовка программы
```
Видно, что два предпоследних коммита находятся в другой ветке
А последний коммит — слияние веток