Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
KorneevMaxA a2f4f663b1
readme.md
11 месяцев назад
.gitignore git 12 месяцев назад
README.md readme.md 11 месяцев назад
main.cpp fix 12 месяцев назад

README.md

Отчет по лабораторной работе № 2 «Система контроля версий Git»

Выполнил: Корнеев М. А.
Группа: А-01-23
Проверил: Козлюк Д. А.

Примечание: работа выполнялась на MacBook в IDE VS Code, из-за этого нет файлов проекта и подключение к серверу кафедры производилось по HTTP.

  1. Создал в именной папке каталог lab_02 и запустил в нем консоль.

  2. Создал каталоги Алисы и Боба, каталог project. В процессе познакомился с cd:

maksimkorneev@MacBook-Air-Maksim lab_02 % mkdir alice 
maksimkorneev@MacBook-Air-Maksim lab_02 % mkdir bob  
maksimkorneev@MacBook-Air-Maksim lab_02 % cd alice 
maksimkorneev@MacBook-Air-Maksim alice % mkdir project
maksimkorneev@MacBook-Air-Maksim alice % cd project   
maksimkorneev@MacBook-Air-Maksim project % cd ..
maksimkorneev@MacBook-Air-Maksim alice % cd project
  1. Инициализировал репозитарий:
maksimkorneev@MacBook-Air-Maksim project % git init
Initialized empty Git repository in /Users/maksimkorneev/Desktop/labs/lab_02/alice/project/.git/
  1. Поменял имя ветки и настроил имя пользователя и email
maksimkorneev@MacBook-Air-Maksim project % git branch -m main
maksimkorneev@MacBook-Air-Maksim project %  git config user.name 'Alice (KorneevMA)'
maksimkorneev@MacBook-Air-Maksim project % git config user.email 'korneevmaxa@mpei.ru'
  1. Просмотрим статус репозитария
maksimkorneev@MacBook-Air-Maksim 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.

  1. Добавим main.cpp и повторим команду
maksimkorneev@MacBook-Air-Maksim 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

  1. Сделаем коммит
maksimkorneev@MacBook-Air-Maksim project % git commit -m 'code: заготовка программы'
[main (root-commit) 2b0c211] code: заготовка программы
 1 file changed, 7 insertions(+)
 create mode 100644 main.cpp
  1. Изменим main.cpp, добавив ввод, но не обновим этот файл в git. Посмотрим статус репозитория:
maksimkorneev@MacBook-Air-Maksim 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, т.е. измененный, а не новый, как было ранее.

  1. Создадим коммит с вводом чисел и выводом суммы:
maksimkorneev@MacBook-Air-Maksim project % git add main.cpp 
maksimkorneev@MacBook-Air-Maksim project % git commit -m 'code: добавлен вывод суммы'
[main 5be8964] code: добавлен вывод суммы
 1 file changed, 4 insertions(+), 1 deletion(-)  

Видим, что в коммит вошло 1 изменеие файла с 4 добавленными строками (4 insertions(+)) и одной убранной (1 deletion(-))

  1. Добавим в программу вывод разности и сделаем коммит вторым указанным способом:
maksimkorneev@MacBook-Air-Maksim project % git add -u      
maksimkorneev@MacBook-Air-Maksim project % git commit -m 'code: добавлен вывод разности'
[main 773cad6] code: добавлен вывод разности
 1 file changed, 2 insertions(+), 1 deletion(-)
  1. Создал файл .gitignore и занёс в него всё, что было создано при сборке программы. Закоммитим.
maksimkorneev@MacBook-Air-Maksim project % git add .gitignore 
maksimkorneev@MacBook-Air-Maksim project % git commit -m "git"
[main 321522b] git
 1 file changed, 2 insertions(+)
 create mode 100644 .gitignore

Теперь git не будет обращать внимание на указанные файлы.

  1. Посмотрим историю коммитов в трёх исполнениях Просто вывод, сжато и сжато+дерево
maksimkorneev@MacBook-Air-Maksim project % git log
commit 321522b0e84fcb1debdd563600ecf1e5f8c4fddf (HEAD -> main)
Author: Alice (KorneevMA) <korneevmaxa@mpei.ru>
Date:   Mon May 13 14:11:29 2024 +0300

    git

commit 773cad6d6385a4acafd1a72898bb37200a276d26
Author: Alice (KorneevMA) <korneevmaxa@mpei.ru>
Date:   Mon May 13 14:04:10 2024 +0300

    code: добавлен вывод разности

commit 5be8964f2d0f450e68ddd0a392b406c7785171f1
Author: Alice (KorneevMA) <korneevmaxa@mpei.ru>
Date:   Mon May 13 14:02:12 2024 +0300

    code: добавлен вывод суммы

commit 2b0c211b150436b5658422ac816c38551ad5290e
Author: Alice (KorneevMA) <korneevmaxa@mpei.ru>
Date:   Mon May 13 13:57:51 2024 +0300

    code: заготовка программы


maksimkorneev@MacBook-Air-Maksim project % git log --oneline --decorate
321522b (HEAD -> main) git
773cad6 code: добавлен вывод разности
5be8964 code: добавлен вывод суммы
2b0c211 code: заготовка программы



maksimkorneev@MacBook-Air-Maksim project % git log --oneline --decorate --all --graph
* 321522b (HEAD -> main) git
* 773cad6 code: добавлен вывод разности
* 5be8964 code: добавлен вывод суммы
* 2b0c211 code: заготовка программы
  1. Введём git log --stat и посмотрим на вывод
maksimkorneev@MacBook-Air-Maksim project % git log --stat
commit 321522b0e84fcb1debdd563600ecf1e5f8c4fddf (HEAD -> main)
Author: Alice (KorneevMA) <korneevmaxa@mpei.ru>
Date:   Mon May 13 14:11:29 2024 +0300

    git

 .gitignore | 2 ++
 1 file changed, 2 insertions(+)

Показывается хэш коммита, автор, точное время создания коммита, тема коммита, добавленный файл. Так же видим сколько файлов изменено и сколько строк в этом файле добавлено

  1. Посмотрим предпоследний коммит
maksimkorneev@MacBook-Air-Maksim project % git show 773cad6
commit 773cad6d6385a4acafd1a72898bb37200a276d26
Author: Alice (KorneevMA) <korneevmaxa@mpei.ru>
Date:   Mon May 13 14:04:10 2024 +0300

    code: добавлен вывод разности

diff --git a/main.cpp b/main.cpp
index 747d932..6911b00 100644
--- a/main.cpp
+++ b/main.cpp
@@ -6,5 +6,6 @@ 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';
 }

Показывается хэш, автор, дата, время, тема. Код программы: - означает удаление указанной строки, а + добавление

  1. Добавим печать произведения в программу, но коммитить пока не будем Посмотрим изменения в рабочей копии
maksimkorneev@MacBook-Air-Maksim project % git diff
diff --git a/main.cpp b/main.cpp
index 6911b00..2a4f3a5 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,6 @@ int main()
     int a, b;
     cin >> a >> b;
     cout << "A + B = " << a + b << '\n'
-         << "A - B = " << a - b << '\n';
+         << "A - B = " << a - b << '\n'
+         << "A * B = " << a * b << '\n';
 }

Как можно видеть, вывод изменился. - показывает, какая сточка была удалена, а +, что было добавлено. (В добавок ко всему я привел вывод к нужному виду)

  1. Посмотрим изменения между самым первым коммитом и коммитом, добавляющим вывод разности Для этого используем хэши этих коммитов, которые написаны выше
maksimkorneev@MacBook-Air-Maksim project % git diff 2b0c211 773cad6
diff --git a/main.cpp b/main.cpp
index 174c33b..6911b00 100644
--- a/main.cpp
+++ b/main.cpp
@@ -3,5 +3,9 @@ using namespace std;
 
 int main()
 {
-    
+    cout << "Enter A and B: ";
+    int a, b;
+    cin >> a >> b;
+    cout << "A + B = " << a + b << '\n'
+         << "A - B = " << a - b << '\n';
 }
  1. Закоммитим изменения в рабочей копии (вывод произведения)
maksimkorneev@MacBook-Air-Maksim project % git commit -a -m "code: добавил вывод произведения"
[main ddcc9a9] code: добавил вывод произведения
 1 file changed, 2 insertions(+), 1 deletion(-)
  1. Откатимся к предпоследнему коммиту:
maksimkorneev@MacBook-Air-Maksim project % git reset --hard HEAD~1
HEAD is now at 321522b git
  1. Добавим над функцией main() комментарий и откатим этот файл к состоянию в последнем коммите:
vatarishin@MacBook-Air-Vatari project % git checkout HEAD -- main.cpp
  1. Из-за того, что через mac не возможно подключится с помощью ssh ключа, поключимся к серверу с помощью протокола HTTP и запушим изменения на сервер
maksimkorneev@MacBook-Air-Maksim project % git remote add origin http://uit.mpei.ru/git/KorneevMaxA/cs-lab02.git
maksimkorneev@MacBook-Air-Maksim project % git push origin main -u
Enumerating objects: 12, done.
Counting objects: 100% (12/12), done.
Delta compression using up to 8 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (12/12), 1.16 KiB | 1.17 MiB/s, done.
Total 12 (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/KorneevMaxA/cs-lab02.git
 * [new branch]      main -> main
branch 'main' set up to track 'origin/main'.
  1. На машине Боба. Клонируем репозитарий с облака, указав URL и папку Перейдём в папку проекта
maksimkorneev@MacBook-Air-Maksim bob % git clone http://uit.mpei.ru/git/KorneevMaxA/cs-lab02 project
Cloning into 'project'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 12 (delta 2), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (12/12), done.
Resolving deltas: 100% (2/2), done.

maksimkorneev@MacBook-Air-Maksim bob % cd project 
  1. Изменим имя пользователя и email
maksimkorneev@MacBook-Air-Maksim project % git config user.name 'Bob (KorneevMA)'
maksimkorneev@MacBook-Air-Maksim project % git config user.email 'korneevmaxa@mpei.ru'
  1. Добавим вывод произведения, закоммитим и отправим на сервер
maksimkorneev@MacBook-Air-Maksim project % git commit -a -m "code: добавил печать произведения"
[main 5fab05e] code: добавил печать произведения
 1 file changed, 2 insertions(+), 1 deletion(-)

maksimkorneev@MacBook-Air-Maksim 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), 394 bytes | 394.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/KorneevMaxA/cs-lab02
   321522b..5fab05e  main -> main

  1. На машине Алисы загрузим изменения Боба
maksimkorneev@MacBook-Air-Maksim 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), 374 bytes | 187.00 KiB/s, done.
From http://uit.mpei.ru/git/KorneevMaxA/cs-lab02
   321522b..5fab05e  main       -> origin/main

maksimkorneev@MacBook-Air-Maksim project % git log --oneline --decorate --all --graph
* 5fab05e (origin/main) code: добавил печать произведения
* 321522b (HEAD -> main) git
* 773cad6 code: добавлен вывод разности
* 5be8964 code: добавлен вывод суммы
* 2b0c211 code: заготовка программы

maksimkorneev@MacBook-Air-Maksim project % git pull --ff-only

Updating 321522b..5fab05e
Fast-forward
 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

После введения первой команды земетим, что в рабочей копии изменений еще не произошло Просмотрим историю и увидим, ветка main отстает на один коммит от ветки origin/main Пододвинем main к скачанной версии

  1. Добавим в программу вывод частного, закоммитим и отправим на сервер
maksimkorneev@MacBook-Air-Maksim project % git commit -a -m "добавил вывод частного"
[main 1e62b23] добавил вывод частного
 1 file changed, 2 insertions(+), 1 deletion(-)

maksimkorneev@MacBook-Air-Maksim 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), 381 bytes | 381.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/KorneevMaxA/cs-lab02.git
   5fab05e..1e62b23  main -> main
  1. У Боба. Загрузим изменения Алисы
maksimkorneev@MacBook-Air-Maksim 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), 361 bytes | 90.00 KiB/s, done.
From http://uit.mpei.ru/git/KorneevMaxA/cs-lab02
   5fab05e..1e62b23  main       -> origin/main
Updating 5fab05e..1e62b23
Fast-forward
 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  1. У Алисы. Дополним программу выводом максимума, закоммитим и отправим на сервер
maksimkorneev@MacBook-Air-Maksim project % git commit -a -m "code: добавил вывод максимума"
[main 60cb826] code: добавил вывод максимума
 1 file changed, 2 insertions(+), 1 deletion(-)

maksimkorneev@MacBook-Air-Maksim 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), 388 bytes | 388.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/KorneevMaxA/cs-lab02.git
   1e62b23..60cb826  main -> main
  1. На машине Боба: Не обновляя локальный репозитарий, добавим вывод минимума, сделаем коммит и попытаемся отправить на сервер
maksimkorneev@MacBook-Air-Maksim project % git commit -a -m "code: добавил вывод минимума"
[main 8267e0c] code: добавил вывод минимума
 1 file changed, 2 insertions(+), 1 deletion(-)
maksimkorneev@MacBook-Air-Maksim project % git push
To http://uit.mpei.ru/git/KorneevMaxA/cs-lab02
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'http://uit.mpei.ru/git/KorneevMaxA/cs-lab02'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Видно, что Git не дайт этого сделать, так как коммит Боба основан не на последнем существующем коммите

  1. Посмотрим всю историю коммитов, предварительно загрузим их
maksimkorneev@MacBook-Air-Maksim 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), 368 bytes | 73.00 KiB/s, done.
From http://uit.mpei.ru/git/KorneevMaxA/cs-lab02
   1e62b23..60cb826  main       -> origin/main

maksimkorneev@MacBook-Air-Maksim project % git log --oneline --decorate --all --graph
* 8267e0c (HEAD -> main) code: добавил вывод минимума
| * 60cb826 (origin/main, origin/HEAD) code: добавил вывод максимума
|/  
* 1e62b23 code: добавил вывод частного
* 5fab05e code: добавил печать произведения
* 321522b git
* 773cad6 code: добавлен вывод разности
* 5be8964 code: добавлен вывод суммы
* 2b0c211 code: заготовка программы

Видно, что возник конфликт. Появилось две версии ветки main

  1. Попытаемся перенести коммит Боба поверх коммита Алисы, то есть поверх 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... 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 6514e20... code: добавил вывод минимума

Получаем сообщение о конфликте. Необходимо сначала привести код Боба к тому виду, как у Алисы, а потом добавлять его изменения Сделаем это вручную

  1. После изменения кода нужно добавить файл и продолжить прерванную операцию rebase После этого отправим изменения на сервер
maksimkorneev@MacBook-Air-Maksim project % git add main.cpp
maksimkorneev@MacBook-Air-Maksim project % git rebase --continue
[detached HEAD 7ad893e] добавил вывод
 1 file changed, 2 insertions(+), 1 deletion(-)
Successfully rebased and updated refs/heads/main.

maksimkorneev@MacBook-Air-Maksim 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), 382 bytes | 382.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/KorneevMaxA/cs-lab02
   60cb826..7ad893e  main -> main
  1. Перейдём на машину Алисы. Создадим ветку double и перейдём в неё
maksimkorneev@MacBook-Air-Maksim project % git branch double
maksimkorneev@MacBook-Air-Maksim project % git checkout double

Switched to branch 'double'

Видим сообщение о том, что мы перешли на другую ветку

  1. Поменяем типы переменных на double, закомиттим
maksimkorneev@MacBook-Air-Maksim project % git commit -a -m "code: изменен тип переменных на double"
[double 8ae5b23] изменен тип переменных на double
 1 file changed, 2 insertions(+), 2 deletions(-)

  1. Перейдём в ветку main, синхронзируем репозитарии и посмотрим историю:
maksimkorneev@MacBook-Air-Maksim project % git log --oneline --decorate --all --graph
* 8ae5b23 (double) code: изменен тип переменных на double
| * 7ad893e (HEAD -> main, origin/main) code: добавил вывод минимума
|/  
* 60cb826 code: добавил вывод максимума 
* 1e62b23 code: добавил вывод частного
* 5fab05e code: добавил печать произведения
* 321522b git
* 773cad6 code: добавлен вывод разности
* 5be8964 code: добавлен вывод суммы
* 2b0c211 code: заготовка программы

Видим две вещи:

  1. Версия кода Алисы совпадает с версией кода Боба.
  2. коммит с хэшем 8ae5b23, в котором мы меняли тип переменной в другой ветке
  1. Сольём ветку double с главной
maksimkorneev@MacBook-Air-Maksim project % git merge double       

Auto-merging main.cpp
Merge made by the 'ort' strategy.
 main.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  1. Попытаемся отправить изменения на сервер, т.к. ранее мы видели, что версии ветки main совпадают всё происходит без проблем.
maksimkorneev@MacBook-Air-Maksim project % 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), 763 bytes | 763.00 KiB/s, done.
Total 7 (delta 3), reused 0 (delta 0), pack-reused 0
remote: . Processing 1 references
remote: Processed 1 references in total
To http://uit.mpei.ru/git/KorneevMaxA/cs-lab02.git
   7ad893e..eb684c6  main -> main

  1. Посмотрим историю всех веток репозитария
maksimkorneev@MacBook-Air-Maksim project % git log --oneline --decorate --all --graph
*   eb684c6 (HEAD -> main, origin/main) Merge branch 'double'
|\  
| * 9ea296a (double) fix
| * 8ae5b23 изменен тип переменных на double
* | 7ad893e добавил вывод минимума
|/  
* 60cb826 добавил вывод максимума
* 1e62b23 добавил вывод частного
* 5fab05e code: добавил печать произведения
* 321522b git
* 773cad6 code: добавлен вывод разности
* 5be8964 code: добавлен вывод суммы
* 2b0c211 code: заготовка программы

Видно, что три предпоследних коммита находятся в другой ветке А последний коммит — слияние веток