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

822 строки
36 KiB
Plaintext

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-24
Примечание: работа выполнялась на Windows.
1.Вход в терминал и создание структуры каталогов
Создаю на рабочем столе каталог lab02 и запускаю в нём Git Bash, приглашение:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02
$
Смотрю файлы в рабочем каталоге с помощью команды ls, так как в каталоге пусто, ls ничего не выводит:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02
$ ls
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02
$
Создаю папки Алисы и Боба:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02
$ mkdir alice
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02
$ mkdir bob
Перехожу в каталог alica с помощью команды cd и создаю каталог project:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02
$ cd alice
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice
$ mkdir project
Перехожу в каталог cd, поднимаюсь на уровень выше (с помощью cd ..) и возвращаюсь обратно в каталог:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice
$ cd project
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project
$ cd ..
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice
$ cd project
2.Инициализация репозитария и настройка Git
Инициализирую (команда git init) репозитарий в текущем каталоге (project):
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project
$ git init
Initialized empty Git repository in C:/Users/koldinad/Desktop/lab02/alice/project/.git/
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (master)
$
Имя ветки по умолчанию master, поменяю её имя на main:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (master)
$ git branch -m main
Настраиваю репозитарий Алисы:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git config user.name 'Alice (KoldinaAE)'
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git config user.email 'arinakoldina@mail.ru'
3.Создание коммитов
В CodeBlocks создаю проект в репозитарии Алисы
Занесение файлов под контроль версий
Просмотр состояния рабочей копии:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
main.cpp
project.cbp
project.layout
nothing added to commit but untracked files present (use "git add" to track)
3 строка - указывается на ветку main
4 строка - пишет, что ещё не было создано коммитов
5, 7-9 строки - показывают неотслеживаемые файлы в хранилище git
6 строка - показывает, как добавить файлы в коммит
10 строка - говорит, что нет добавленных файлов в коммит, но есть неотслеживаемые файлы
Заношу файл main.cpp под Git:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
Смотрю состояние рабочей копии:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
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)
bin/
obj/
project.cbp
project.layout
Появилась строка с файлом, который можно добавить в коммит
Выполняю коммит с файлом main.cpp и сообщением:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: заготовка программы'
[main (root-commit) ab3f27a] code: заготовка программы
1 file changed, 9 insertions(+)
create mode 100644 main.cpp
Составление сообщений к коммитам
Заношу файл project.cbp под Git и выполняю коммит с сообщением:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add project.cbp
warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'build: добавлен файл проекта'
[main aabe4a4] build: добавлен файл проекта
1 file changed, 40 insertions(+)
create mode 100644 project.cbp
Создание коммитов с изменениями
Меняю тело функции main() на ввод двух чисел, смотрю состояние репозитория:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/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)
bin/
obj/
project.layout
no changes added to commit (use "git add" and/or "git commit -a")
4 строка - показывает изменения, не подготовленные для коммита
6 строка - предлагает отменить изменения
7 строка - показывает изменённый файл
Изменяю код и делаю коммит суммы a и b:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m "code: вывод суммы"
[main ddf8503] code: вывод суммы
1 file changed, 5 insertions(+), 3 deletions(-)
Изменяю код и делаю коммит разности a и b:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add -u
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m "code: вывод разности"
[main 7b2cbbd] code: вывод разности
1 file changed, 2 insertions(+), 1 deletion(-)
4.Игнорирование файлов
Создаю в CodeBlocks файл .gitignore, куда вписываю строки с названиями файлов, которые необходимо игнорировать. После создаю коммит:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add .gitignore
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m "git: игнорирование файлов"
[main 27clfa2] git: игнорирование файлов
1 file changed, 4 insertions(+)
Create mode 100644 .gitignore
Проверяю, чтобы необходимые файлы и каталоги не отображались:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
nothing to commit, working tree clean
5.Просмотр истории
Работа с журналом репозитария
Команда git log --stat, которая показывает файлы, изменённые в коммитах:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --stat
commit 27c1fa292d25b7dc57956bd9f6cc0ae6a9aa3c6a (HEAD -> main)
Author: Alice (KoldinaAE) <arinakoldina@mail.ru>
Date: Sun Mar 16 21:18:46 2025 +0300
git: игнорирование файлов
.gitignore | 4 ++++
1 file changed, 4 insertions(+)
commit 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f
Author: Alice (KoldinaAE) <arinakoldina@mail.ru>
Date: Sun Mar 16 20:52:39 2025 +0300
code: вывод разности
main.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
commit ddf8503cd670ca685f305582933b86baf4a9883e
Author: Alice (KoldinaAE) <arinakoldina@mail.ru>
Date: Sun Mar 16 20:44:34 2025 +0300
code: вывод суммы
main.cpp | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
commit aabe4a41ff9c1e6440655326ef942fad47b7e76f
Author: Alice (KoldinaAE) <arinakoldina@mail.ru>
Date: Sun Mar 16 20:22:10 2025 +0300
build: добавлен файл проекта
project.cbp | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
commit ab3f27a5c577a4120e3dfce2e4354ae54b267d83
Author: Alice (KoldinaAE) <arinakoldina@mail.ru>
Date: Sun Mar 16 19:54:10 2025 +0300
code: заготовка программы
main.cpp | 9 +++++++++
1 file changed, 9 insertions(+)
Для последнего коммита данная команда показывает:
1 строка - хэш коммита
2 строка - автор,
3 строка - дата и время создания
4 строка - комментарий
5 строка - файл, который был изменён, количество изменённых строчек
6 строчка - статистика изменений данных файлов
Коммиты по теме build:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --grep "build:"
commit aabe4a41ff9c1e6440655326ef942fad47b7e76f
Author: Alice (KoldinaAE) <arinakoldina@mail.ru>
Date: Sun Mar 16 20:22:10 2025 +0300
build: добавлен файл проекта
Коммиты, затрагивающие project.cbp:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log -- project.cbp
commit aabe4a41ff9c1e6440655326ef942fad47b7e76f
Author: Alice (KoldinaAE) <arinakoldina@mail.ru>
Date: Sun Mar 16 20:22:10 2025 +0300
build: добавлен файл проекта
Просмотр коммитов
Вывод предпоследнего коммита тремя способами:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show HEAD~1
commit 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f
Author: Alice (KoldinaAE) <arinakoldina@mail.ru>
Date: Sun Mar 16 20:52:39 2025 +0300
code: вывод разности
diff --git a/main.cpp b/main.cpp
index 056d8a1..8435233 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,6 @@ int main()
cout << "Enter A and B: ";
int a, b;
cin >> a >> b;
- cout << a + b;
+ cout << "A + B = " << a + b << '\n'
+ << "A - B = " << a - b << '\n';
}
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show main~1
commit 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f
Author: Alice (KoldinaAE) <arinakoldina@mail.ru>
Date: Sun Mar 16 20:52:39 2025 +0300
code: вывод разности
diff --git a/main.cpp b/main.cpp
index 056d8a1..8435233 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,6 @@ int main()
cout << "Enter A and B: ";
int a, b;
cin >> a >> b;
- cout << a + b;
+ cout << "A + B = " << a + b << '\n'
+ << "A - B = " << a - b << '\n';
}
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f
commit 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f
Author: Alice (KoldinaAE) <arinakoldina@mail.ru>
Date: Sun Mar 16 20:52:39 2025 +0300
code: вывод разности
diff --git a/main.cpp b/main.cpp
index 056d8a1..8435233 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,6 @@ int main()
cout << "Enter A and B: ";
int a, b;
cin >> a >> b;
- cout << a + b;
+ cout << "A + B = " << a + b << '\n'
+ << "A - B = " << a - b << '\n';
}
Просмотр изменений
Добавляю в main.cpp печать произведения чисел, смотрю изменения в рабочей копии с помощью команды git diff:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git diff
diff --git a/main.cpp b/main.cpp
index 8435233..f372c78 100644
--- a/main.cpp
+++ b/main.cpp
@@ -8,5 +8,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';
}
3 строка - файлы, которые сравнивает команда: a/main.cpp (старая версия файла) и b/main.cpp (новая версия файла)
4 строка - хэши старой и новой версий файла
7 строка - в каких строках произошли изменения и количество строк в старом и новом файлах
8 - 13 строка - показывает, что изменилось в строках, что осталось таким же
Изменения между самым первым коммитом и коммитом, добавляющим вывод разности:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git diff ab3f27a5c577a4120e3dfce2e4354ae54b267d83 7b2cbbdebde96a278f95a54b2202d195aa2bdb7f
diff --git a/main.cpp b/main.cpp
index 8e9eb8f..8435233 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,9 @@ using namespace std;
int main()
{
- cout << "Hello world!" << endl;
- return 0;
-}<E4><E4>
+ cout << "Enter A and B: ";
+ int a, b;
+ cin >> a >> b;
+ cout << "A + B = " << a + b << '\n'
+ << "A - B = " << a - b << '\n';
+}
diff --git a/project.cbp b/project.cbp
new file mode 100644
index 0000000..99bb702
--- /dev/null
+++ b/project.cbp
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<CodeBlocks_project_file>
+ <FileVersion major="1" minor="6" />
+ <Project>
+ <Option title="project" />
+ <Option pch_mode="2" />
+ <Option compiler="gcc" />
+ <Build>
+ <Target title="Debug">
+ <Option output="bin/Debug/project" prefix_auto="1" extension_auto="1" />
+ <Option object_output="obj/Debug/" />
+ <Option type="1" />
+ <Option compiler="gcc" />
+ <Compiler>
+ <Add option="-g" />
+ </Compiler>
+ </Target>
+ <Target title="Release">
+ <Option output="bin/Release/project" prefix_auto="1" extension_auto="1" />
+ <Option object_output="obj/Release/" />
+ <Option type="1" />
+ <Option compiler="gcc" />
+ <Compiler>
+ <Add option="-O2" />
+ </Compiler>
+ <Linker>
+ <Add option="-s" />
+ </Linker>
+ </Target>
+ </Build>
+ <Compiler>
+ <Add option="-Wall" />
+ <Add option="-fexceptions" />
+ </Compiler>
+ <Unit filename="main.cpp" />
+ <Extensions>
+ <lib_finder disable_auto="1" />
+ </Extensions>
+ </Project>
+</CodeBlocks_project_file>
6.Откат изменений
Создаю коммит изменённого кода с выводом произведения:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m "code: вывод суммы произведения"
[main e518ef6] code: вывод суммы произведения
1 file changed, 2 insertions(+), 1 deletion(-)
Отменяю этот коммит с помощью команды git reset:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git reset --hard HEAD~1
HEAD is now at 27c1fa2 git: игнорирование файлов
Добавляю над функцией main() комментарий, а затем убираю изменения в main.cpp другим способом — откатив этот файл к состоянию в последнем коммите (HEAD):
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git checkout HEAD -- main.cpp
7.Обмен кодом через удалённое хранилище
Регистрируюсь на Git УИТ
Настройка SSH
Для загрузки данных в репозитарий GitHub будет использоваться протокол SSH. Поэтому для обмена данными с сервером нужно сгенерировать пару из открытого и закрытого ключей:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ ssh-keygen
Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/koldinad/.ssh/id_ed25519):
Created directory '/c/Users/koldinad/.ssh'.
Enter passphrase for "/c/Users/koldinad/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/koldinad/.ssh/id_ed25519
Your public key has been saved in /c/Users/koldinad/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:5XdOhO2pDS/hMY8PeRGw4Ifaz4UykKuadD5b+P4hl8w Arina@DESKTOP-NHR9C8F
The key's randomart image is:
+--[ED25519 256]--+
| . . |
| o o = |
| o + + + |
| B . + o |
| S = B B |
| o o O ^ . |
| . + o E X * |
| . =.o o . = |
| o o+o.. . |
+----[SHA256]-----+
Вводить пароль каждый раз, когда используется ключ, неудобно. Использую программу-агент, которая работает в фоне и предоставляет ключи другим программам, в том числе git. Запускаю агент:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ eval $(ssh-agent -s)
Agent pid 810
Загружаю ключ:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ ssh-add
Enter passphrase for /c/Users/koldinad/.ssh/id_ed25519:
Identity added: /c/Users/koldinad/.ssh/id_ed25519 (Arina@DESKTOP-NHR9C8F)
Открытый ключ, загружаю его в список открытых ключей своей учётной записи:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDzOwPn0lbfaMMtVTa6qxmE2KT28JfUCEu3GykM+Ywci Arina@DESKTOP-NHR9C8F
Отправка проекта на сервер
Добавляю репозитарий и загружаю хранилище git на GitHub с помощью команды git push:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git remote add origin git@uit.mpei.ru:KoldinaAE/cs-lab02.git
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push -u origin main
The authenticity of host 'uit.mpei.ru (193.233.68.149)' can't be established.
ED25519 key fingerprint is SHA256:Q5w0UKEzQKA3J6NyMtjwCLvtAykoxdugIXjx6NwU4NA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'uit.mpei.ru' (ED25519) to the list of known hosts.
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 20 threads
Compressing objects: 100% (13/13), done.
Writing objects: 100% (15/15), 2.05 KiB | 190.00 KiB/s, done.
Total 15 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:KoldinaAE/cs-lab02.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
Получение проекта с сервера
Клонирую проект на компьютер Боба:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob
$ git clone git@uit.mpei.ru:KoldinaAE/cs-lab02.git project
Cloning into 'project'...
Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519':
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 15 (delta 1), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (15/15), done.
Resolving deltas: 100% (1/1), done.
Перехожу в каталог проекта на компьютере Боба:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob
$ cd project
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$
Настраиваю Git:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git config user.name 'Bob (KoldinaAE)'
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git config user.email 'arinakoldina@mail.ru'
8.Совместная работа над проектом без конфликтов правок
«На машине Боба» добавляю в программу печать произведения чисел и делаю коммит:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git add main.cpp
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git commit -m "code: вывод произведения"
[main 1621872] code: вывод произведения
1 file changed, 2 insertions(+), 1 deletion(-)
Отправляю коммит на сервер:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git push
Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519':
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 20 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 416 bytes | 208.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:KoldinaAE/cs-lab02.git
27c1fa2..1621872 main -> main
«На машине Алисы» выполняю загрузку изменений:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/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 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 396 bytes | 18.00 KiB/s, done.
From uit.mpei.ru:KoldinaAE/cs-lab02
27c1fa2..1621872 main -> origin/main
Смотрю историю всех веток на компьютере Алисы:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate --all --graph
* 1621872 (origin/main, origin/HEAD) code: вывод произведения
* 27c1fa2 (HEAD -> main) git: игнорирование файлов
* 7b2cbbd code: вывод разности
* ddf8503 code: вывод суммы
* aabe4a4 build: добавлен файл проекта
* ab3f27a code: заготовка программы
Двигаю ветку main к скачанной версии:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git pull --ff-only
Updating 27c1fa2..1621872
Fast-forward
main.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Убеждаюсь, что рабочая копия проекта у Алисы соответствует версии у Боба:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git pull
Already up to date.
У Алисы добавляю в программу вывод деления, коммичу изменение и отправляю на сервер:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m "code: вывод деления"
[main 6b05c46] code: вывод деления
1 file changed, 2 insertions(+), 1 deletion(-)
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 20 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 407 bytes | 407.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:KoldinaAE/cs-lab02.git
1621872..6b05c46 main -> main
Получаю новую версию на машине Боба:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git fetch
Enter passphrase for key '/c/Users/koldinad/.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 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 387 bytes | 29.00 KiB/s, done.
From uit.mpei.ru:KoldinaAE/cs-lab02
1621872..6b05c46 main -> origin/main
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git pull --ff-only
Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519':
Updating 1621872..6b05c46
Fast-forward
main.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git pull
Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519':
Already up to date.
9.Разрешение конфликтов правок при совместной работе
Добавляю в код Алисы печать максимума, делаю коммит и отправляю на сервер:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: вывод максимума'
[main 348cd84] code: вывод максимума
1 file changed, 2 insertions(+), 1 deletion(-)
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push
Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519':
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 20 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 414 bytes | 138.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:KoldinaAE/cs-lab02.git
6b05c46..348cd84 main -> main
В код Боба добавляю печать минимума, делаю коммит и пытаюсь отправить его на сервер, вижу, что удалённый репозитарий не принимает изменений, так как коммит Боба основан не на последнем существующем коммите:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git add main.cpp
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git commit -m 'code: вывод минимума'
[main 8787111] code: вывод минимума
1 file changed, 2 insertions(+), 1 deletion(-)
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git push
Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519':
To uit.mpei.ru:KoldinaAE/cs-lab02.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'uit.mpei.ru:KoldinaAE/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.
От лица Боба загружаю коммиты и отображаю историю всех веток, виже, что ветка main локального репозитария разошлась с веткой main (origin/main) на сервере:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git fetch
Enter passphrase for key '/c/Users/koldinad/.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 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 394 bytes | 20.00 KiB/s, done.
From uit.mpei.ru:KoldinaAE/cs-lab02
6b05c46..348cd84 main -> origin/main
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git log --oneline --decorate --all --graph
* 8787111 (HEAD -> main) code: вывод минимума
| * 348cd84 (origin/main, origin/HEAD) code: вывод максимума
|/
* 6b05c46 code: вывод деления
* 1621872 code: вывод произведения
* 27c1fa2 git: игнорирование файлов
* 7b2cbbd code: вывод разности
* ddf8503 code: вывод суммы
* aabe4a4 build: добавлен файл проекта
* ab3f27a code: заготовка программы
Перемещаю коммит Боба поверх коммита Алисы, то есть поверх (origin/main), но эта команда завершается ошибкой, сообщающей о конфликте в main.cpp:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main|MERGING)
$ git rebase origin/main
Auto-merging main.cpp
CONFLICT (content): Merge conflict in main.cpp
error: could not apply 8787111... 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 8787111... code: вывод минимума
Убираю метки конфликта, и дорабатываю код так, чтобы программа компилировалась и работала. Затем загружаю изменения в индекс и продолжаю операцию git rebase, с помощью флага –continue:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git add main.cpp
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git rebase --continue
[detached HEAD 4090b2d] code: вывод минимума
1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/main.
История хранилища теперь имеет желаемый вид:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git log --oneline --decorate --all --graph
* 4090b2d (HEAD -> main) code: вывод минимума
* 348cd84 (origin/main, origin/HEAD) code: вывод максимума
* 6b05c46 code: вывод деления
* 1621872 code: вывод произведения
* 27c1fa2 git: игнорирование файлов
* 7b2cbbd code: вывод разности
* ddf8503 code: вывод суммы
* aabe4a4 build: добавлен файл проекта
* ab3f27a code: заготовка программы
Отправляю изменения на сервер:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/bob/project (main)
$ git push
Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519':
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 20 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 419 bytes | 209.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:KoldinaAE/cs-lab02.git
348cd84..4090b2d main -> main
10.Использование веток
На машине Алисы добавляю ветку double и переключаюсь на неё:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git branch double
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git checkout double
Switched to branch 'double'
В коде заменяю тип переменных на double, делаю коммит:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (double)
$ git add main.cpp
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (double)
$ git commit -m "code: изменение типа переменных на double"
[double f129d47] code: изменение типа переменных на double
1 file changed, 1 insertion(+), 1 deletion(-)
Переключаюсь на ветку main и синхронизирую её:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (double)
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git fetch
Enter passphrase for key '/c/Users/koldinad/.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 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 399 bytes | 28.00 KiB/s, done.
From uit.mpei.ru:KoldinaAE/cs-lab02
348cd84..4090b2d main -> origin/main
Получаю одновременно две ветки:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate --all --graph
* f129d47 (double) code: изменение типа переменных на double
| * 4090b2d (origin/main, origin/HEAD) code: вывод минимума
|/
* 348cd84 (HEAD -> main) code: вывод максимума
* 6b05c46 code: вывод деления
* 1621872 code: вывод произведения
* 27c1fa2 git: игнорирование файлов
* 7b2cbbd code: вывод разности
* ddf8503 code: вывод суммы
* aabe4a4 build: добавлен файл проекта
* ab3f27a code: заготовка программы
Cливаю эти ветки:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git merge double
Updating cffc65a..278681f
Fast-forward
main.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Отправляю изменения на сервер:
Arina@DESKTOP-NHR9C8F MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push
Enter passphrase for key '/c/Users/koldinad/.ssh/id_ed25519':
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 20 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 415 bytes | 207.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To uit.mpei.ru:KoldinaAE/cs-lab02.git
057accf..e3833c8 main -> main