Отчет по лабораторной работе №2 «Система контроля версии Git» Выполнил: Кузин В.В. Группа: А-03-22 Проверил: Козлюк Д.А. Филатов С.А. Цель работы Знать понятия и компоненты систем контроля версий (СКВ), порядок и приемы работы с ними. Уметь участвовать в командной разработке, используя конкретную СКВ — Git, а также популярный хостинг репозитариев — GitHub. Ход работы: Вход в терминал и создание структуры каталогов ● Создаем папки пользователей (mkdir alice, mkdir bob) ● В папке пользователя alice создаем папку project Инициализация репозитария и настройка Git ● Инициализируем хранилище git (git init) ● Настраиваем папки пользователя, с которым будем работать: $ git init Initialized empty Git repository in C:/Users/жесткий п/Desktop/lab_02/alice/project/.git/ жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git config user.name 'Alice(KuzinVV)' жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git config user.email 'KuzinVV@mpei.ru' Создание коммитов: Занесение файлов под контроль версий ● Просматриваем состояние рабочей копии(git status) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git status On branch master No commits yet Untracked files: (use "git add ..." to include in what will be committed) bin/ main.cpp obj/ project.cbp nothing added to commit but untracked files present (use "git add" to track) В первой строке ссылка HEAD указывает на ветку main Вторая стр. говорит о том, что еще не было создано коммитов Третья стр. показывает не отслеживаемые файлы в хранилище git, и подсказывает как их добавить Последняя стр. говорит о том, что нет добавленных (отслеживаемых) файлов, которые можно будет закоммитить жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git add main.cpp Появилась строка с файлами в индексе, стоящими в очереди на коммит Составление сообщений к коммитам ● Создаем 2 коммита с информацией о коде программы и просматриваем текущий статус: жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit -m 'code: заготовка программы' [master (root-commit) 034736f] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git add project.cbp warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit -m 'build: добавлен файл проекта' [master c07a302] build: добавлен файл проекта 1 file changed, 40 insertions(+) create mode 100644 project.cbp ● После добавления в программу ввода 2х чисел видим, что файл main.cpp был изменен жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git status On branch master Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: main.cpp Untracked files: (use "git add ..." to include in what will be committed) bin/ obj/ no changes added to commit (use "git add" and/or "git commit -a") ● Проделываем ряд изменений с кодом программы и делаем коммиты несколькими способами жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git add main.cpp жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit -m "Ввод двух чисел" [master 4bba4b5] Ввод двух чисел 1 file changed, 4 insertions(+), 1 deletion(-) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git add -u жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit -m "Вывод суммы" [master 58baa60] Вывод суммы 1 file changed, 1 insertion(+), 1 deletion(-) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit -u On branch master Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: main.cpp Untracked files: (use "git add ..." to include in what will be committed) bin/Debug/project.exe obj/Debug/main.o no changes added to commit (use "git add" and/or "git commit -a") жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git add -u жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit -m "Вывод разности" [master 12ceb72] Вывод разности 1 file changed, 2 insertions(+), 1 deletion(-) • Создадим файл .gitignore, необходимый, чтобы скрыть файлы bin/, / obj/, прописываем там это и видим, что по мере заполнения файла, ненужный нам файлы пропали из git status: жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git status On branch master Untracked files: (use "git add ..." to include in what will be committed) .gitignore obj/ nothing added to commit but untracked files present (use "git add" to track) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git status On branch master Untracked files: (use "git add ..." to include in what will be committed) .gitignore nothing added to commit but untracked files present (use "git add" to track) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git add .gitignore жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit -m "git" [master 883899e] git 1 file changed, 2 insertions(+) create mode 100644 .gitignore Просмотр истории ● С помощью команды git log и различных ее опций просматриваем журнал коммитов Используем команду git log –stat жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git log --stat commit 883899eb12349e2a5cb9c7aea3e83d1c70582e79 (HEAD -> master) Author: Alice(KuzinVV) Date: Mon Mar 20 14:19:39 2023 +0300 git .gitignore | 2 ++ 1 file changed, 2 insertions(+) commit 12ceb72ce75e2a6e37bb112ace06239b906b4dbe Author: Alice(KuzinVV) Date: Mon Mar 20 14:16:44 2023 +0300 Вывод разности main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 58baa60e6e5d5e7f0fd0f1ad24332ab4331bc81f Author: Alice(KuzinVV) Date: Mon Mar 20 14:14:38 2023 +0300 Вывод суммы main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4bba4b52fe5169f122a0f40f6d93b611c5f136e3 Author: Alice(KuzinVV) Date: Mon Mar 20 14:12:33 2023 +0300 Ввод двух чисел main.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit c07a3027f31e7364ff2e8149f2fa91c292f82f28 Author: Alice(KuzinVV) Date: Mon Mar 20 14:10:01 2023 +0300 build: добавлен файл проекта project.cbp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) commit 034736faafb60a5f98cf6ae17f485a824938ab8f Author: Alice(KuzinVV) Date: Mon Mar 20 14:06:50 2023 +0300 code: заготовка программы main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) • С помощью команды $ git log --oneline –decorate проведем то же самое действие, получив сокращенный журнал коммитов жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git log --oneline --decorate 883899e (HEAD -> master) git 12ceb72 Вывод разности 58baa60 Вывод суммы 4bba4b5 Ввод двух чисел c07a302 build: добавлен файл проекта 034736f code: заготовка программы • Команда $ git log --oneline --decorate --all –graph позволяет увидеть журнал коммитов с характерными указателями жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git log --oneline --decorate --all --graph * 883899e (HEAD -> master) git * 12ceb72 Вывод разности * 58baa60 Вывод суммы * 4bba4b5 Ввод двух чисел * c07a302 build: добавлен файл проекта * 034736f code: заготовка программы $ git log --grep "build: команда позволяет выбрать и просмотреть выбранный коммит: жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git log -- project.cbp commit c07a3027f31e7364ff2e8149f2fa91c292f82f28 Author: Alice(KuzinVV) Date: Mon Mar 20 14:10:01 2023 +0300 build: добавлен файл проекта $ git log -- project.cbp показывает коммит из файла: жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git log -- project.cbp commit c07a3027f31e7364ff2e8149f2fa91c292f82f28 Author: Alice(KuzinVV) Date: Mon Mar 20 14:10:01 2023 +0300 build: добавлен файл проекта ● Далее тремя способами просматриваем информацию о предпоследнем коммите (результат всех способов один, поэтому в отчете не повторялся) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git show HEAD commit 883899eb12349e2a5cb9c7aea3e83d1c70582e79 (HEAD -> master) Author: Alice(KuzinVV) Date: Mon Mar 20 14:19:39 2023 +0300 git diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c7473d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/bin +/obj жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git show HEAD~1 commit 12ceb72ce75e2a6e37bb112ace06239b906b4dbe Author: Alice(KuzinVV) Date: Mon Mar 20 14:16:44 2023 +0300 Вывод разности diff --git a/main.cpp b/main.cpp index 6de6dd2..5371b30 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,7 @@ 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'; return 0; } жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git show master HEAD~1 commit 883899eb12349e2a5cb9c7aea3e83d1c70582e79 (HEAD -> master) Author: Alice(KuzinVV) Date: Mon Mar 20 14:19:39 2023 +0300 git diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c7473d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/bin +/obj commit 12ceb72ce75e2a6e37bb112ace06239b906b4dbe Author: Alice(KuzinVV) Date: Mon Mar 20 14:16:44 2023 +0300 Вывод разности diff --git a/main.cpp b/main.cpp index 6de6dd2..5371b30 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,7 @@ 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'; return 0; } жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git show ^C жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git show 12ceb7 commit 12ceb72ce75e2a6e37bb112ace06239b906b4dbe Author: Alice(KuzinVV) Date: Mon Mar 20 14:16:44 2023 +0300 Вывод разности diff --git a/main.cpp b/main.cpp index 6de6dd2..5371b30 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,7 @@ 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'; return 0; } ● Далее тремя способами просматриваем информацию о предпоследнем коммите (результат всех способов один, поэтому в отчете не повторялся) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git diff diff --git a/main.cpp b/main.cpp index 5371b30..fbd9488 100644 --- a/main.cpp +++ b/main.cpp @@ -8,6 +8,7 @@ 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'; return 0; } жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git diff HEAD~2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c7473d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/bin +/obj diff --git a/main.cpp b/main.cpp index 6de6dd2..fbd9488 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,8 @@ 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' + << "A * B = " << a * b << '\n'; return 0; } жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit~5 HEAD git: 'commit~5' is not a git command. See 'git --help'. жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git diff HEAD~5 HEAD diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c7473d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/bin +/obj diff --git a/main.cpp b/main.cpp index b4392ec..5371b30 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,10 @@ using namespace std; int main() { - cout << "Hello world!" << endl; + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; return 0; } diff --git a/project.cbp b/project.cbp new file mode 100644 index 0000000..99bb702 --- /dev/null +++ b/project.cbp @@ -0,0 +1,40 @@ master) $ git diff HEAD~5 HEAD~1 diff --git a/main.cpp b/main.cpp index b4392ec..5371b30 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,10 @@ using namespace std; int main() { - cout << "Hello world!" << endl; + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; return 0; } diff --git a/project.cbp b/project.cbp new file mode 100644 index 0000000..99bb702 --- /dev/null +++ b/project.cbp @@ -0,0 +1,40 @@ В качестве первой стр. мы видим входные данные команды для сравнения файлов Далее идет заголовок с легендой изменения, место измененного кода и измененная функция На след. строке идут строки вокруг измененной части, удаленные и добавленные строки Откат коммита Добавляем коммит вывода произведения и командой $ git reset --hard HEAD~1 удаляем его жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git add main.cpp жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit -m "Вывод произведения" [master 652d0a6] Вывод произведения 1 file changed, 2 insertions(+), 1 deletion(-) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git reset --hard HEAD~1 HEAD is now at 883899e git жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git checkout HEAD -- main.cpp Создание ключа для обмена кодом Обмен кодом через удаленное хранилище Обмен кодом через удалённое хранилище. Для загрузки данных в репозитарий GitHub будет использоваться протокол SSH. Поэтому для обмена данными с сервером нужно сгенерировать пару из открытого и закрытого ключей жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/жесткий п/.ssh/id_rsa): /c/Users/жесткий п/.ssh/id_rsa already exists. Overwrite (y/n)? y Enter passphrase (empty for no passphrase): Enter same passphrase again: Passphrases do not match. Try again. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/жесткий п/.ssh/id_rsa Your public key has been saved in /c/Users/жесткий п/.ssh/id_rsa.pub The key fingerprint is: SHA256:DUKXJtEjr+Hp6Ja2QjeXeMHgLTCxgpnD/TNnWBrrw4o жесткий п@DESKTOP-UVLMK4V The key's randomart image is: +---[RSA 3072]----+ | .. oo.. | |oo+...o.= | |*..= =.*.. | | o + @..o | | @ OS . | | . * % | | . . @ | | o * o | | E *o. | +----[SHA256]-----+ Также после этого отображаются уникальные данные для ключа. Поскольку в работе вводить пароль при каждом использовании ключа может быть неудобно, можно использовать программу-агент, которую достаточно запустить перед началом работы жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ eval $(ssh-agent -s) Agent pid 2253 жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ ssh-add Enter passphrase for /c/Users/жесткий п/.ssh/id_rsa: Identity added: /c/Users/жесткий п/.ssh/id_rsa (жесткий п@DESKTOP-UVLMK4V) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCe01bfFFoj5jJzCMFztO+qqcbb20izocEYasN7k6zfkURcAEexN62KSLoVq7P99g3+UL4wDm05c5JGOQne32/1bH6p6KrWBnbCO78Y6wC+X7F1mV00+KaoEN05OhhJnpj0lL7N+p6WWa/dhUO/iRL7tY9sMIv9D81qEKnyvoJWN1Ks+qzVJGBEtXl39IAB1DWml727HuZ34MudYA5fzI1mOe2sbmsk5yPD0dzhvG+ccioo77++oYY6KVuufCO7l+2HJN0nVmcyaKC5MtU9vrHlG8kQClSS38CUGmrQjvHxkpn6fn9sU8D6rXwGNyBQ7QrwMPZJbBAugAx+f8XVr/5AsX24Tk5g8Y1eHSZBMsM/bRvXkNLKgqecqJZdnyFoSjtcBh1lcNYQxc9/tzDBMwVE8D3enPW7RNxI5qOBClc1p03u0A4pSb4QvbSiDBWnbQ7apaQrUuPnVcG/q1T3W0IIrL5pTdBeav45ba6kUH+r73EAkZYUk2MOOCrskawaa8k= жесткий п@DESKTOP-UVLMK4V Затем в настройках аккаунта GitHub нужно добавить публичный ключ, который по умолчанию записывается в файл id_rsa.pub. ● Теперь добавим репозитарий на который будем загружать хранилище git, и загрузим хранилище git на GitHub с помощью команды git push. жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git remote add origin git@uit.mpei.ru:KuzinVV/cs-lab_02.git жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git push -u origin main error: src refspec main does not match any error: failed to push some refs to 'uit.mpei.ru:KuzinVV/cs-lab_02.git' жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git push fatal: The current branch master has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin master To have this happen automatically for branches without a tracking upstream, see 'push.autoSetupRemote' in 'git help config'. жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git push --set-upstream origin master Enumerating objects: 18, done. Counting objects: 100% (18/18), done. Delta compression using up to 4 threads Compressing objects: 100% (16/16), done. Writing objects: 100% (18/18), 2.23 KiB | 43.00 KiB/s, done. Total 18 (delta 2), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:KuzinVV/cs-lab_02.git * [new branch] master -> master branch 'master' set up to track 'origin/master'. ● К работе присоединяется боб. Клонируем репозитарий с помощью git clone. ● $ git clone git@github.com:Kra1k/cs-lab02.git ● Cloning into 'cs-lab_02'... ● Enter passphrase for key '/c/Users/жесткий п/.ssh/id_rsa': ● remote: Enumerating objects: 20, done. ● remote: Counting objects: 100% (20/20), done. ● remote: Compressing objects: 100% (12/12), done. ● Receiving objects: 100% (20/20), done. ● Resolving deltas: 100% (2/2), done. ● remote: Total 20 (delta 2), reused 20 (delta 2), pack-reused 0 ● Настроим хранилище боба ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) ● $ git config user.name 'Bob(KuzinVV)' ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) ● $ git config user.email 'KuzinVV@mpei.ru' жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git config user.name 'Bob(KuzinVV)' жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git config user.email 'KuzinVV@mpei.ru' жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git status On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git show HEAD commit 2dae335f8a6f484195be4fcfdc4fe7e5a4c45970 (HEAD -> master) Merge: 27292cf 883899e Author: Bob (KuzinVV) Date: Mon Mar 20 15:24:02 2023 +0300 Merge branch 'master' of uit.mpei.ru:KuzinVV/cs-lab_02 жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git push Enter passphrase for key '/c/Users/жесткий п/.ssh/id_rsa': Enter passphrase for key '/c/Users/жесткий п/.ssh/id_rsa': Enumerating objects: 9, done. Counting objects: 100% (8/8), done. Delta compression using up to 4 threads Compressing objects: 100% (5/5), done. Writing objects: 100% (5/5), 697 bytes | 348.00 KiB/s, done. Total 5 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:KuzinVV/cs-lab_02.git 883899e..2dae335 master -> master жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git fetch Enter passphrase for key '/c/Users/жесткий п/.ssh/id_rsa': 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), 389 bytes | 1024 bytes/s, done. From uit.mpei.ru:KuzinVV/cs-lab_02 2dae335..dda7d4c master -> origin/master ● Боб добавляет новый коммит, опережающий версию на сервере, и загружает его на GitHub. ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git add project.cpp жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git commit -m 'code: добавление вывода произведения двух чисел' [main 49afd29] code: добавление вывода произведения двух чисел 1 file changed, 1 insertion(+), 1 deletion(-) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git log --oneline --decorate --all --graph * 49afd29 (HEAD -> main) code: добавление вывода произведения двух чисел * a66d232 (origin/main, origin/HEAD) code: добавлен вывод разности двух чисел * f06ff5f code: добавлен вывод суммы двух чисел * c18ecb8 code: добавлен ввод двух чисел * 75fb07c build: добавлен файл проекта * e04836e code: заготовка программы жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git push Enter passphrase for key '/c/Users/Михаил/.ssh/id_rsa': Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 456 bytes | 456.00 KiB/s, done. Total 4 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (1/1), completed with 1 local object. To github.com:Kra1k/cs-lab¬_02.git a66d232..49afd29 main -> main ● Обновляем версию программы у Алисы. Для этого загружаем загрузку изменений с помощью git fetch. А затем переносим ветку main на скачанную версию с помощью git pull (который, вообще говоря, все равно вызывает git fetch, поэтому его ручной вызов не обязателен). жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git fetch remote: Enumerating objects: 9, done. remote: Counting objects: 100% (8/8), done. remote: Compressing objects: 100% (5/5), done. remote: Total 5 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (5/5), 677 bytes | 2.00 KiB/s, done. From uit.mpei.ru:KuzinVV/cs-lab_02 883899e..2dae335 master -> origin/master жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git log --oneline --decorate --all --graph * 2dae335 (origin/master) Merge branch 'master' of uit.mpei.ru:KuzinVV/cs-lab_02 |\ | * 883899e git * | 27292cf Вывод произведения |/ * 12ceb72 (HEAD -> master) Вывод разности * 58baa60 Вывод суммы * 4bba4b5 Ввод двух чисел * c07a302 build: добавлен файл проекта * 034736f code: заготовка программы жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git pull --ff-only Updating 12ceb72..2dae335 Fast-forward .gitignore | 2 ++ main.cpp | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 .gitignore ● Далее Алиса вносит новое изменение, а Боб его скачивает. жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git add main.cpp жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit -m "Вывод деления" [master dda7d4c] Вывод деления 1 file changed, 2 insertions(+), 1 deletion(-) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git show HEAD commit dda7d4c124d5aeee9fc89c15b5b0b88609496b22 (HEAD -> master) Author: Alice(KuzinVV) Date: Mon Mar 20 15:36:38 2023 +0300 Вывод деления diff --git a/main.cpp b/main.cpp index 427ded3..d601ffe 100644 --- a/main.cpp +++ b/main.cpp @@ -9,7 +9,8 @@ int main() cin >> a >> b; cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n' - << "A * B = " << a * b << '\n'; + << "A * B = " << a * b << '\n' + << "A / B = " << a / b << '\n'; return 0; } жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 409 bytes | 409.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 uit.mpei.ru:KuzinVV/cs-lab_02.git 2dae335..dda7d4c master -> master ● Теперь Алиса и Боб добавляют в программу печать максимума и минимума соответственно, а затем пробуют загрузить изменения на репозитарий на сервере. жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git add main.cpp жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git commit -m "Вывод максимума" [master 372c9f3] Вывод максимума 1 file changed, 2 insertions(+) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git show HEAD commit 372c9f385676d09b94f9d6326fa093d60cf56d9b (HEAD -> master) Author: Alice(KuzinVV) Date: Mon Mar 20 15:40:29 2023 +0300 Вывод максимума diff --git a/main.cpp b/main.cpp index d601ffe..d0f3794 100644 --- a/main.cpp +++ b/main.cpp @@ -11,6 +11,8 @@ int main() << "A - B = " << a - b << '\n' << "A * B = " << a * b << '\n' << "A / B = " << a / b << '\n'; + if (a > b) cout << "max = " << a << '\n'; + else cout << "max = " << b << '\n'; return 0; } жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 427 bytes | 427.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 uit.mpei.ru:KuzinVV/cs-lab_02.git dda7d4c..372c9f3 master -> master жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) $ git show HEAD commit 372c9f385676d09b94f9d6326fa093d60cf56d9b (HEAD -> master, origin/master) Author: Alice(KuzinVV) Date: Mon Mar 20 15:40:29 2023 +0300 Вывод максимума diff --git a/main.cpp b/main.cpp index d601ffe..d0f3794 100644 --- a/main.cpp +++ b/main.cpp @@ -11,6 +11,8 @@ int main() << "A - B = " << a - b << '\n' << "A * B = " << a * b << '\n' << "A / B = " << a / b << '\n'; + if (a > b) cout << "max = " << a << '\n'; + else cout << "max = " << b << '\n'; return 0; } ● (боб) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git add main.cpp жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git commit -m "Вывод минимума" [master b746bb0] Вывод минимума 1 file changed, 2 insertions(+) жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git show HEAD commit b746bb090fcbac7e616c41e950b0fbaea78b8760 (HEAD -> master) Author: Bob(KuzinVV) Date: Mon Mar 20 15:45:17 2023 +0300 Вывод минимума diff --git a/main.cpp b/main.cpp index d601ffe..45306da 100644 --- a/main.cpp +++ b/main.cpp @@ -11,6 +11,8 @@ int main() << "A - B = " << a - b << '\n' << "A * B = " << a * b << '\n' << "A / B = " << a / b << '\n'; + if (a > b) cout << "min = " << b << '\n'; + else cout << "min = " << a << '\n'; return 0; } жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git push Enter passphrase for key '/c/Users/жесткий п/.ssh/id_rsa': To uit.mpei.ru:KuzinVV/cs-lab_02.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'uit.mpei.ru:KuzinVV/cs-lab_02.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. (Однако загрузить на сервер изменения получается только у Алисы потому, что Боб затем пытается загрузить версию, основанную на более старом коммите, чем самый новый коммит в репозитарии GitHub.) ● Загрузим версию с сервера ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) ● $ git fetch ● Enter passphrase for key '/c/Users/жесткий п/.ssh/id_rsa': ● Enter passphrase for key '/c/Users/жесткий п/.ssh/id_rsa': ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) ● $ git show ● commit b746bb090fcbac7e616c41e950b0fbaea78b8760 (HEAD -> master) ● Author: Bob(KuzinVV) ● Date: Mon Mar 20 15:45:17 2023 +0300 ● ● Вывод минимума ● ● diff --git a/main.cpp b/main.cpp ● index d601ffe..45306da 100644 ● --- a/main.cpp ● +++ b/main.cpp ● @@ -11,6 +11,8 @@ int main() ● << "A - B = " << a - b << '\n' ● << "A * B = " << a * b << '\n' ● << "A / B = " << a / b << '\n'; ● + if (a > b) cout << "min = " << b << '\n'; ● + else cout << "min = " << a << '\n'; ● return 0; ● ● } ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) ● $ git log --oneline --decorate --all –-graph ● fatal: ambiguous argument '–-graph': unknown revision or path not in the working tree. ● Use '--' to separate paths from revisions, like this: ● 'git [...] -- [...]' ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) ● $ git log --oneline --decorate --all --graph ● * b746bb0 (HEAD -> master) Вывод минимума ● | * 372c9f3 (origin/master, origin/HEAD) Вывод максимума ● |/ ● * dda7d4c Вывод деления ● * 2dae335 Merge branch 'master' of uit.mpei.ru:KuzinVV/cs-lab_02 ● |\ ● | * 883899e git ● * | 27292cf Вывод произведения ● |/ ● * 12ceb72 Вывод разности ● * 58baa60 Вывод суммы ● * 4bba4b5 Ввод двух чисел ● * c07a302 build: добавлен файл проекта ● * 034736f code: заготовка программы (Ветка main раздвоилась.) ● Объединим коммиты Боба и Алисы, поместив коммит Боба выше с помощью комманды git rebase. ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) ● $ git rebase origin/master ● Auto-merging main.cpp ● CONFLICT (content): Merge conflict in main.cpp ● error: could not apply b746bb0... Вывод минимума ● hint: Resolve all conflicts manually, mark them as resolved with ● hint: "git add/rm ", 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 b746bb0... Вывод минимума ● Комманда завершается с ошибкой из-за конфликта в файле с кодом main.cpp. Производный файл от файла Алисы и Боба записывается в рабочую копию с помеченными метками конфликта. Убираем метки конфликта, и дорабатываем код так, чтобы программа компилировалась и работала. Затем загружаем изменения в индекс и продолжаем операцию git rebase, с помощью флага –continue. жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master|REBASE 1/1) $ git add -u жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master|REBASE 1/1) $ git status interactive rebase in progress; onto 372c9f3 Last command done (1 command done): pick b746bb0 Вывод минимума No commands remaining. You are currently rebasing branch 'master' on '372c9f3'. (all conflicts fixed: run "git rebase --continue") Changes to be committed: (use "git restore --staged ..." to unstage) modified: main.cpp жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master|REBASE 1/1) $ git rebase --continue [detached HEAD 9ebad82] Вывод минимума 1 file changed, 5 insertions(+) Successfully rebased and updated refs/heads/master. (Получили желаемый результат) ● Отправим изменения на сервер. жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/bob/project (master) $ git push Enter passphrase for key '/c/Users/жесткий п/.ssh/id_rsa': Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 462 bytes | 462.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 uit.mpei.ru:KuzinVV/cs-lab_02.git 372c9f3..9ebad82 master -> master ● В это время Алиса создаёт новую ветку (с помощью комманды git branch) для изменения типа переменных на вещественный. Начинает она с коммита, когда добавлена печать максимума. ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git pull ● Updating 372c9f3..9ebad82 ● Fast-forward ● main.cpp | 5 +++++ ● 1 file changed, 5 insertions(+) ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git fetch ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git checkout -b ● error: switch `b' requires a value ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git checkout double ● Switched to branch 'double' ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (double) ● $ git add -u ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (double) ● $ git commit -m "Перевод a, b в double" ● [double c7f3bdf] Перевод a, b в double ● 1 file changed, 6 insertions(+), 1 deletion( ● Затем переключается на ветку main. И синхронизирует её ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (double) ● $ git checkout master ● Switched to branch 'master' ● Your branch is up to date with 'origin/master'. ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git fetch ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git add -u ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git commit -m "Изменение типа данных" ● [master 5422fdc] Изменение типа данных ● 1 file changed, 1 insertion(+), 1 deletion(-) ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git fetch ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git pull --ff-only ● Already up to date. ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ log --oneline --decorate --all –graph ● bash: log: command not found ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git log --oneline --decorate --all --graph ● * 5422fdc (HEAD -> master) Изменение типа данных ● * 9ebad82 (origin/master) Вывод минимума ● | * c7f3bdf (double) Перевод a, b в double ● |/ ● * 372c9f3 Вывод максимума ● * dda7d4c Вывод деления ● * 2dae335 Merge branch 'master' of uit.mpei.ru:KuzinVV/cs-lab_02 ● |\ ● | * 883899e git ● * | 27292cf Вывод произведения ● |/ ● * 12ceb72 Вывод разности ● * 58baa60 Вывод суммы ● * 4bba4b5 Ввод двух чисел ● * c07a302 build: добавлен файл проекта ● * 034736f code: заготовка программы ● (Получаем одновременно две ветки) ● Объединяем их с помощью комманды git merge. Вносим последние изменения и загружаем на GitHub. ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git merge double ● Merge made by the 'ort' strategy. ● ● жесткий п@DESKTOP-UVLMK4V MINGW64 ~/Desktop/lab_02/alice/project (master) ● $ git log --oneline --decorate --all --graph ● * e00b9df (HEAD -> master) Merge branch 'double' ● |\ ● | * c7f3bdf (double) Перевод a, b в double ● * | 5422fdc Изменение типа данных ● * | 9ebad82 (origin/master) Вывод минимума ● |/ ● * 372c9f3 Вывод максимума ● * dda7d4c Вывод деления ● * 2dae335 Merge branch 'master' of uit.mpei.ru:KuzinVV/cs-lab_02 ● |\ ● | * 883899e git ● * | 27292cf Вывод произведения ● |/ ● * 12ceb72 Вывод разности ● * 58baa60 Вывод суммы ● * 4bba4b5 Ввод двух чисел ● * c07a302 build: добавлен файл проек