From 804812386dbef71d17ee3c626a001e4e6741735f Mon Sep 17 00:00:00 2001 From: "Alice (IshutinaYI)" Date: Mon, 5 Jun 2023 12:12:05 +0300 Subject: [PATCH] =?UTF-8?q?files:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=20=D0=B8=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=20=D0=B8=D0=B3=D0=BD=D0=BE=D1=80=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + report_lab02_ishutinayi.md | 1084 ++++++++++++++++++++++++++++++++++++ 2 files changed, 1086 insertions(+) create mode 100644 .gitignore create mode 100644 report_lab02_ishutinayi.md 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/report_lab02_ishutinayi.md b/report_lab02_ishutinayi.md new file mode 100644 index 0000000..0a4293d --- /dev/null +++ b/report_lab02_ishutinayi.md @@ -0,0 +1,1084 @@ +Отчет по лабораторной работе №2 "Система контроля версий Git" +_____ +Выполнила: Ишутина Е. И. +Группа: А-01-22 +Проверил: Козлюк Д. А. +_____ +Примечание: работа выполнялась на Windows. +_____ + +## 1. Начало работы + +На рабочем столе создала каталог "lab02" и запустила в нем Git Bash. Эмулятор терминала вывел + приглашение: + +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02 +$ +``` +Команда ls показала, что каталог пуст: + +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02 +$ ls + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02 +$ +``` + +С помощью команды mkdir создаю каталоги alice и bob + +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02 +$ mkdir alice + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02 +$ mkdir bob +``` + +Перехожу в каталог alice, создаю там подкаталог project, захожу в него и выхожу. +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02 +$ cd alice + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice +$ mkdir project + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice +$ cd project + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project +$ cd .. + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice +$ ls +project/ + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice +$ cd project + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project +$ +``` +## 2. Инициализация репозитория +В каталоге project инициализирую репозитарий + +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (master) +$ git init +Initialized existing Git repository in C:/Users/GSTQ/Desktop/lab02/alice/project/.git/ +``` +Сейчас ветка имеет имя master. Подсказка по переименованию не выведена. Пользуясь командой branch +опцией -m, переименовываю ветку. +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (master) +$ git branch -m main +``` +Просматриваю скрытый каталог .git +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ ls -A +.git/ +``` +Настраиваю репозитарий, изменив имя пользователя и адрес электронной почты +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git config user.name 'Alice (IshutinaYI)' + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git config user.email 'ishutinayi@mpei.ru' +``` +## 3. Создание коммита + +В CodeBlocks создаю проект в репозитарии Алисы. Он имеет путь C:\Users\GSTQ\Desktop\lab02\alice + Внутри каталога project содержатся .git, bin, obj, main, project.cbp + Это доказывает вызов команды git status +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main ------ В ветке с названием main + +No commits yet ------ Еще нет ни одного коммита + +Untracked files: ------ Неотслеживаемые (не являются частью ни одного коммита, Git их еще не +----------------------------- контролирует) файлы +(use "git add ..." to include in what will be committed) ------ предложение закоммитить что-нибудь +bin/ ------ Каталог, создаваемый CodeBlocks'ом при сборке проекта +main.cpp ------ Исполняемый файл проекта +obj/ ------ Аналогично bin/ +project.cbp ------ Файл проекта CodeBlocks + +nothing added to commit but untracked files present (use "git add" to track) ------ Сообщение о том, +------------------------------------------------------------ что еще ничего не занесено под Git, и неплохо было бы +------------------------------------------------------------ это сделать. +``` +Файл main.cpp заношу под Git: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ +``` +Теперь я могу посмотреть статус репозитария еще раз... +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main + +No commits yet + +Changes to be committed: +(use "git rm --cached ..." to unstage) ------ ...И увидеть, что main.cpp теперь отслеживается +---------------------------------------------------------- и будет внесен в ближайший коммит. +new file: main.cpp + +Untracked files: +(use "git add ..." to include in what will be committed) +bin/ +obj/ +project.cbp ------ main.cpp - больше не неотслеживаемый файл. +``` +Иногда на Windows можен появиться предупредительное сообщение +``` +warning: LF will be replaced by CRLF in main.cpp +The file will have its original line endings in your working directory +``` +означающее, что перенос строки будет дополнен возвратом каретки. +В моём случае это сообщение не появилось. + + +Выполняю коммит, отметив в качестве изменения создание пустого файла проекта: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: Заготовка программы' ------ -m означает "message" и показывает, что дальше +------------------------------------------------------------------- нами будет введен текст. +[main (root-commit) 83e242d] code: Заготовка программы +1 file changed, 9 insertions(+) +create mode 100644 main.cpp +``` +Вношу под Git файл project.cbp +``` +GSTQ@WIN-CBR6EH59CO3 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 ------ Неточности адаптации +------------------------------------------------------------------------------ Unix-подобных систем и Windows: в первых конец строки +------------------------------------------------------------------------------ обозначается как Line Feed (перевод строки), а в +------------------------------------------------------------------------------ Windows - Carriage Return Line Feed - возврат каретки. +``` +Делаю коммит и проверяю, что у меня получилось: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'build: Добавлен файл проекта' +[main 1a7913c] build: Добавлен файл проекта +1 file changed, 40 insertions(+) +create mode 100644 project.cbp + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +Untracked files: +(use "git add ..." to include in what will be committed) +bin/ ------ project.cbp исчез из списка неопознанных файлов. +obj/ + +nothing added to commit but untracked files present (use "git add" to track) +``` + +Изменяю код: пусть он просит на ввод два числа: +``` + #include + using namespace std; + int main(){ + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + + return 0; + } +``` +Теперь git status показывает, что файл main.cpp был изменён: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +Changes not staged for commit: +(use "git add ..." to update what will be committed) +(use "git restore ..." to discard changes in working directory) ------ Используйте команду restore для отмены изменений в +------------------------------------------------------------------------- рабочем каталоге +modified: main.cpp ------ изменено: 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") +``` +Пробую создать коммит тремя способами. +Сначала добавляю в код вывод суммы введенных чисел, затем делаю коммит, промежуточно посмотрев статус Git: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add main.cpp + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +Changes to be committed: +(use "git restore --staged ..." to unstage) +modified: main.cpp + +Untracked files: +(use "git add ..." to include in what will be committed) +bin/ +obj/ +project.depend + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: Добавлен вывод суммы чисел' +[main a0f4cab] code: Добавлен вывод суммы чисел +1 file changed, 5 insertions(+), 4 deletions(-) +``` +Добавляю в код разность чисел и ее вывод, делаю коммит: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add -u ------ ключ -u (updated) позволяет работать только с измененными файлами. + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +Changes to be committed: +(use "git restore --staged ..." to unstage) +modified: main.cpp + +Untracked files: +(use "git add ..." to include in what will be committed) +bin/ +obj/ +project.depend + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m "code: Добавлен вывод разности файлов" +[main 71248b0] code: Добавлен вывод разности файлов +1 file changed, 1 insertion(+) + +``` +Несколько корретирую внешний вид кода и изпользую последний, самый короткий способ: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -a -m "code: Подкорректировано оформление" +[main 8bff39f] code: Подкорректировано оформление +1 file changed, 2 insertions(+), 3 deletions(-) +``` +## 5. Скрытие ненужного +Сделаю системные каталоги bin и obj неотображаемыми в status. Создаю в проекте пустой файл, задаю ему имя .gitignore, +пишу строку /bin, пересобираю и сохраняю проект. Теперь git status показывает следующее: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +Changes not staged for commit: +(use "git add ..." to update what will be committed) +(use "git restore ..." to discard changes in working directory) +modified: project.cbp + +Untracked files: +(use "git add ..." to include in what will be committed) +.gitignore ------ bin/ пропал из списка, зато теперь есть файл /gitignore +obj/ +project.depend + +no changes added to commit (use "git add" and/or "git commit -a") +``` +Аналогичные махинации проделываю для скрытия obj: записываю во вторую строку файла "/obj", сохраняю и смотрю: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git status +On branch main +Changes not staged for commit: +(use "git add ..." to update what will be committed) +(use "git restore ..." to discard changes in working directory) +modified: project.cbp + +Untracked files: +(use "git add ..." to include in what will be committed) +.gitignore ------ obj/ тоже исчез. +project.depend + +no changes added to commit (use "git add" and/or "git commit -a") +``` +Просматриваю историю. Пробую разные способы вывода изменений. +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log ------ Журнал изменений без модификаций, длинный и неудобный +commit 8bff39f067513947c95539c3591aa3d2d4a7c6b7 (HEAD -> main) +Author: Alice (IshutinaYI) +Date: Mon Mar 13 10:38:17 2023 +0300 + + code: Подкорректировано оформление + +commit 71248b044cf4b0d0ff85543773a2ef598a2f7a3d +Author: Alice (IshutinaYI) +Date: Mon Mar 13 10:33:44 2023 +0300 + + code: Добавлен вывод разности файлов + +commit a0f4cab0833a71f49874ecf58db71f37a582cf9c +Author: Alice (IshutinaYI) +Date: Mon Mar 13 10:30:06 2023 +0300 + + code: Добавлен вывод суммы чисел + +commit 1a7913c37026f930f7219fdad7e040007f688f67 +Author: Alice (IshutinaYI) +Date: Mon Mar 13 10:17:57 2023 +0300 + + build: Добавлен файл проекта + +commit 83e242df8a39b03bfc4702a7f8162bf34028ab4d +Author: Alice (IshutinaYI) +Date: Mon Mar 13 09:59:52 2023 +0300 + + code: Заготовка программы +``` +Добавление опции --stat отображает все изменения файлов: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --stat +commit 8bff39f067513947c95539c3591aa3d2d4a7c6b7 (HEAD -> main) ------ после слова commit идет его полный хэш +---------------------------------------------------------------- (не в краткой форме), по которому к нему в дальнейшем +---------------------------------------------------------------- можно будет обратиться. +Author: Alice (IshutinaYI) ------ Видно, что изменение юзернейма и почты произошло успешно. +Date: Mon Mar 13 10:38:17 2023 +0300 ------ Дата создания коммита, время местное с указанием отклонения +------------------------------------------------------------- по UTC. + + code: Подкорректировано оформление + +main.cpp | 5 ++--- +1 file changed, 2 insertions(+), 3 deletions(-) ------ В рамках одного файла произошло пять изменений: два добавления +-------------------------------------------------------- и три удаления данных. + +commit 71248b044cf4b0d0ff85543773a2ef598a2f7a3d +Author: Alice (IshutinaYI) +Date: Mon Mar 13 10:33:44 2023 +0300 + + code: Добавлен вывод разности файлов + +main.cpp | 1 + +1 file changed, 1 insertion(+) + +commit a0f4cab0833a71f49874ecf58db71f37a582cf9c +Author: Alice (IshutinaYI) +Date: Mon Mar 13 10:30:06 2023 +0300 + + code: Добавлен вывод суммы чисел + +main.cpp | 9 +++++---- +1 file changed, 5 insertions(+), 4 deletions(-) + +commit 1a7913c37026f930f7219fdad7e040007f688f67 +Author: Alice (IshutinaYI) +Date: Mon Mar 13 10:17:57 2023 +0300 + + build: Добавлен файл проекта + +project.cbp | 40 ++++++++++++++++++++++++++++++++++++++++ +1 file changed, 40 insertions(+) + +commit 83e242df8a39b03bfc4702a7f8162bf34028ab4d +Author: Alice (IshutinaYI) +Date: Mon Mar 13 09:59:52 2023 +0300 + + code: Заготовка программы + +main.cpp | 9 +++++++++ +1 file changed, 9 insertions(+) +``` +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --oneline --decorate ------ Сокращенная форма вывода: короткий хэш, нет данных о времени и авторе, +--------------------------------------------------- на описание каждого коммита приходится одна строка. +8bff39f (HEAD -> main) code: Подкорректировано оформление +71248b0 code: Добавлен вывод разности файлов +a0f4cab code: Добавлен вывод суммы чисел +1a7913c build: Добавлен файл проекта +83e242d code: Заготовка программы +``` +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --oneline --decorate --all --graph ------ опция all выводит историю для всех веток (но у нас она одна, +-------------------------------------------------------- и изменений мы не увидим). graph показывает историю в виде графа, +-------------------------------------------------------- но из-за приоритета опции oneline эти графы сократились до одной звёздочки +-------------------------------------------------------- в каждой строке. +* 8bff39f (HEAD -> main) code: Подкорректировано оформление +* 71248b0 code: Добавлен вывод разности файлов +* a0f4cab code: Добавлен вывод суммы чисел +* 1a7913c build: Добавлен файл проекта +* 83e242d code: Заготовка программы +``` +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --graph ------ посмотрим, как выглядит graph в полном виде. +* commit 8bff39f067513947c95539c3591aa3d2d4a7c6b7 (HEAD -> main) + | Author: Alice (IshutinaYI) + | Date: Mon Mar 13 10:38:17 2023 +0300 + | + | code: Подкорректировано оформление + | +* commit 71248b044cf4b0d0ff85543773a2ef598a2f7a3d + | Author: Alice (IshutinaYI) + | Date: Mon Mar 13 10:33:44 2023 +0300 + | + | code: Добавлен вывод разности файлов + | +* commit a0f4cab0833a71f49874ecf58db71f37a582cf9c + | Author: Alice (IshutinaYI) + | Date: Mon Mar 13 10:30:06 2023 +0300 + | + | code: Добавлен вывод суммы чисел + | +* commit 1a7913c37026f930f7219fdad7e040007f688f67 + | Author: Alice (IshutinaYI) + | Date: Mon Mar 13 10:17:57 2023 +0300 + | + | build: Добавлен файл проекта + | +* commit 83e242df8a39b03bfc4702a7f8162bf34028ab4d + Author: Alice (IshutinaYI) + Date: Mon Mar 13 09:59:52 2023 +0300 + + code: Заготовка программы +``` +Изучу поиск по изменениям. Если оно связано с файлом, он просто указывается после log: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log -- project.cbp +commit 1a7913c37026f930f7219fdad7e040007f688f67 +Author: Alice (IshutinaYI) +Date: Mon Mar 13 10:17:57 2023 +0300 + + build: Добавлен файл проекта +``` +Если поиск связан с конкретной темой, она указывается в кавычках после опции grep: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --grep "build:" +commit 1a7913c37026f930f7219fdad7e040007f688f67 +Author: Alice (IshutinaYI) +Date: Mon Mar 13 10:17:57 2023 +0300 + + build: Добавлен файл проекта +``` +Выведем информацию о последнем коммите (что именно было изменено): +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git show 8bff39f067513947c95539c3591aa3d2d4a7c6b7 +commit 8bff39f067513947c95539c3591aa3d2d4a7c6b7 (HEAD -> main) +Author: Alice (IshutinaYI) +Date: Mon Mar 13 10:38:17 2023 +0300 + + code: Подкорректировано оформление + +diff --git a/main.cpp b/main.cpp +index b73d0df..5e77b4a 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -4,8 +4,7 @@ int main(){ +cout << "Enter A and B: "; +int a, b; +cin >> a >> b; +- cout << "a + b = " << a + b; +- cout << "a - b = " << a - b; +- ++ cout << "A + B = " << a + b << '\n' ++ << "A - B = " << a - b << '\n'; + return 0; + } +``` +Файл с кодом изменен: добавлен вывод произведения чисел. С помощью git diff просматриваю изменения. +``` +$ git diff +warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it +diff --git a/main.cpp b/main.cpp ------ показано, что main.cpp имеет две версии: старую "а" и новую "b". +index 5e77b4a..ed523a8 100644 ------ хэш коммита +--- a/main.cpp ------ старая версия файла удалена... ++++ b/main.cpp ------ ... и заменена новой. +@@ -5,6 +5,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; +} +diff --git a/project.cbp b/project.cbp +index 99bb702..34f06bc 100644 +--- a/project.cbp ++++ b/project.cbp +@@ -32,6 +32,7 @@ + + + ++ ------ В .gitignore произошли изменения, ведь он скрывает bin и obj, +------------------------------------------------------- которые меняются после пересборки. + + + +``` +Сообщим в качестве аргументов для функции diff хэши самого первого коммита и того, где была добавлена разность. +В выводе будут все изменения между ними, без разделения на промежуточне коммиты, но отдельные для каждого файла. +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git diff 83e242df8a39b03bfc4702a7f8162bf34028ab4d 71248b044cf4b0d0ff85543773a2ef598a2f7a3d +diff --git a/main.cpp b/main.cpp +index b4392ec..b73d0df 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -1,9 +1,11 @@ +#include +- +using namespace std; ++int main(){ ++ cout << "Enter A and B: "; ++ int a, b; ++ cin >> a >> b; ++ cout << "a + b = " << a + b; ++ cout << "a - b = " << a - b; + +-int main() +-{ +- cout << "Hello world!" << endl; + 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 @@ + + + + ++ ++ ++ ++ +``` +## 6. Откат коммитов +Создаю коммит, зафиксировав добавление произведения: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add -u +warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m "code: Добавлен вывод произведения" +[main 6962d6d] code: Добавлен вывод произведения +2 files changed, 3 insertions(+), 1 deletion(-) +``` +Откачу коммит, вернувшись к тому, что был до него: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git reset --hard HEAD~1 ------ HEAD~1 указывает, что нужный коммит за один шаг до текущего. +---------------------------------- Ключ --hard - удаление всех отслеживаемых файлов из ветки (например, --soft +---------------------------------- позволяет выбирать, что удалить) +HEAD is now at 8bff39f code: Подкорректировано оформление +``` +Добавляю перед строкой int main(){ комментарий +> //You may type here whatever you want :) + +Пересобираю, сохраняю файл, откатываю до состояния предыдущего коммита: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git checkout HEAD -- main.cpp + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ +``` +После нажатия ОК на предупредительном окне строка исчезает. +``` +## 7. Подключение к серверу +``` +Настраиваю SSH, создаю пару ключей. +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ ssh-keygen ------ Команда создаст пару ключей: открытый и закрытый. +---------------------------------------------- Закрытый ключ записывается в файл, для него я создаю +---------------------------------------------- и подтверждаю пароль. +Generating public/private rsa key pair. +Enter file in which to save the key (/c/Users/GSTQ/.ssh/id_rsa): +Enter passphrase (empty for no passphrase): +Enter same passphrase again: +Your identification has been saved in /c/Users/GSTQ/.ssh/id_rsa +Your public key has been saved in /c/Users/GSTQ/.ssh/id_rsa.pub +The key fingerprint is: +SHA256:MZfRrs4VPI3pl/xQ3AzI1lmhFcmUKfrTVsr2OcLpgMo GSTQ@WIN-CBR6EH59CO3 +The key's randomart image is: ++---[RSA 3072]----+ +| .o ooBB| +| o=.*= | +| o o+.=.+.| +| + .B . *| +| S o.=.+.| +| o ooOo | +| + o.o++.| +| . . o .+ oo| +| E ... .| ++----[SHA256]-----+ +``` +Запустим программу, предоставляющую доступ к ключам без подтверждения пароля каждый раз. +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ eval `ssh-agent -s` +Agent pid 1115 ------ Терминал вернул идентификатор агента. Значит, он запущен. +``` +Загружаем ключ: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ ssh-add +Enter passphrase for /c/Users/GSTQ/.ssh/id_rsa: ------ Ввожу пароль. +Identity added: /c/Users/GSTQ/.ssh/id_rsa (GSTQ@WIN-CBR6EH59CO3) +``` +Команда cat отображает содержимое файла в консоль: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ cat ~/.ssh/id_rsa.pub +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCu+0QycJRDPcxB5teKxeikvNjHzQv+sWU0WooVQbUJgREtb8pSqAT59HVy3drWtNjxzh1JLsVb2BD5pqSA+D0l5KVfX6MZ7K8mBrJ/V4cGGJ8tPALtuJkr+veNOKrSAMNg2+A0XecXFD8lzNhg+U8QOBiUfyIkA6NzHMhcnZ4KyD6T55+qEVmvPrrYgfM+To11B+3wrBmqF3ZTW8IGWbbGcfRyq80y/NAhlbR9ztnhupkSffJ7Bctv+DHS113xDOgsucUFMiZG4LLDV4Jeo+0OcDHwQv53PaGpfWkGp5R/EaPByEi5uUeKE7O8j1XLH++rQNJsFGMjdZ35/OfAZnvPytkPhPTqdLlnVO/k9kMFc9amYHywKxrE+0Tit8R9iL5HCuWBTYWN29sirv6XtLIkGBUAQC57NnU74OGuFXcp5kJL3BuDpUWiGIFA5dbXXQ887FcdjOOpycOjlHcqm3MH4mjpgQ4qujri2EFr6YadPjg/Pctmo99ReE7O6P+7cTk= GSTQ@WIN-CBR6EH59CO3 +``` +Копирую этот ключ, перехожу на сайт Git UIT, Пользователь -> Настройки -> SSH/GPG ключи -> Управление SSH ключами +-> Добавить ключ. Ввожу ключ, переименовываю его. +``` +Нажав на +, создаю новый репозитарий. Ввожу имя, настраиваю, подтверждаю создание. Выданы команды для активации, +ввожу их в командную строку: + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git remote add origin git@uit.mpei.ru:ishutinayi/cs-lab02.git +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 +Please type 'yes', 'no' or the 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 12 threads +Compressing objects: 100% (14/14), done. +Writing objects: 100% (15/15), 2.11 KiB | 1.05 MiB/s, done. +Total 15 (delta 2), reused 0 (delta 0), pack-reused 0 +remote: . Processing 1 references +remote: Processed 1 references in total +To uit.mpei.ru:ishutinayi/cs-lab02.git +* [new branch] main -> main + branch 'main' set up to track 'origin/main'. +``` +После обновления проекта файлы появились в интерфейсе. +## 7. Добавление нового пользователя + +Перехожу в каталог bob и запускаю bash для него. Клонирую проект: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob +$ git clone git@uit.mpei.ru:ishutinayi/cs-lab02.git project +Cloning into 'project'... +Enter passphrase for key '/c/Users/GSTQ/.ssh/id_rsa': ------ Введен пароль. +remote: Enumerating objects: 15, done. +remote: Counting objects: 100% (15/15), done. +remote: Compressing objects: 100% (14/14), done. +remote: Total 15 (delta 2), reused 0 (delta 0), pack-reused 0 +Receiving objects: 100% (15/15), done. +Resolving deltas: 100% (2/2), done. +``` +Инициализирую Боба: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob +$ cd project + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main) +$ git config user.name 'Bob (IshutinaYI)' + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main) +$ git config user.email 'ishutinayi@mpei.ru' +``` +"На машине Боба" делаю коммит и отправляю его на сервер. +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 12 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 390 bytes | 390.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/IshutinaYI/cs-lab02.git +8bff39f..2d4cef2 main -> main +``` +От имени Алисы загружаю изменения: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git fetch +Enter passphrase for key '/c/Users/GSTQ/.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), 370 bytes | 52.00 KiB/s, done. +From uit.mpei.ru:ishutinayi/cs-lab02 +8bff39f..2d4cef2 main -> origin/main +``` +История всех веток: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --oneline --graph --decorate --all +* 2d4cef2 (origin/main) code: Возвращен вывод произведения +* 8bff39f (HEAD -> main) code: Подкорректировано оформление +* 71248b0 Добавлен вывод разности файлов +* a0f4cab code: Добавлен вывод суммы чисел +* 1a7913c build: Добавлен файл проекта +* 83e242d code: Заготовка программы +``` +Продвигаю ветку main к скачанной версии: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git pull --ff-only +Updating 8bff39f..2d4cef2 +Fast-forward +main.cpp | 3 ++- +1 file changed, 2 insertions(+), 1 deletion(-) +``` +От имени Алисы в код был добавлен вывод разности. Теперь код выглядит так: +``` +<...> +cout << "A + B = " << a + b << '\n' +<< "A - B = " << a - b << '\n' +<< "A * B = " << a * b << '\n' +<< "A / B = " << a / b << '\n'; <...> +``` +Добавляю изменение в область отслеживания: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add -u +``` +Делаю коммит: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: Добавлен вывод разности' +[main 380aa92] code: Добавлен вывод разности +1 file changed, 2 insertions(+), 1 deletion(-) +``` +Отправляю его на сервер: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 12 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 386 bytes | 386.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/IshutinaYI/cs-lab02.git +2d4cef2..380aa92 main -> main +``` +"Ловлю" изменение "на машине Боба" +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/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 1), reused 0 (delta 0), pack-reused 0 +Unpacking objects: 100% (3/3), 366 bytes | 40.00 KiB/s, done. +From http://uit.mpei.ru/git/IshutinaYI/cs-lab02 +2d4cef2..380aa92 main -> origin/main +``` +Пододвигаю ветку: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main) +$ git pull --ff-only +Updating 2d4cef2..380aa92 +Fast-forward +main.cpp | 3 ++- +1 file changed, 2 insertions(+), 1 deletion(-) +``` +## 8. Устранение конфликтов правок + +"На машине Алисы" добавляю вывод максимума (<< "Maximum between A and B = " << max(a,b);). +Отправляю git'y на отслеживание: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git add -u +``` +Коммит: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'code: Добавлена печать максимума' +[main f72cf38] code: Добавлена печать максимума +1 file changed, 2 insertions(+), 1 deletion(-) +``` +Отправка коммита на сервер: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 12 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 426 bytes | 426.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/IshutinaYI/cs-lab02.git +380aa92..f72cf38 main -> main +``` +"На машине Боба" добавляю минимум () и проделываю все привычные операции: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main) +$ git add -u + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main) +$ git commit -m 'code: Добавлен вывод минимума' +[main 5d9e81d] code: Добавлен вывод минимума +1 file changed, 2 insertions(+), 1 deletion(-) + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main) +$ git push +To http://uit.mpei.ru/git/IshutinaYI/cs-lab02.git +! [rejected] main -> main (fetch first) +error: failed to push some refs to 'http://uit.mpei.ru/git/IshutinaYI/cs-lab02.git' +hint: Updates were rejected because the remote contains work that you dо ------ Обновления отклонены, так как +------------------------------------------------------------------------ на удаленном компьютере есть работа +-------------------------------------------------------------------- которой нет у вас. +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. +``` +Подгружаю изменения с сервера: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/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 1), reused 0 (delta 0), pack-reused 0 +Unpacking objects: 100% (3/3), 406 bytes | 33.00 KiB/s, done. +From http://uit.mpei.ru/git/IshutinaYI/cs-lab02 +380aa92..f72cf38 main -> origin/main +``` +Смотрю, что получилось: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main) +$ git log --all --decorate --graph --oneline +* 5d9e81d (HEAD -> main) code: Добавлен вывод минимума + | * f72cf38 (origin/main, origin/HEAD) code: Добавлена печать максимума + |/ +* 380aa92 code: Добавлен вывод разности ------ от последнего обещго коммита исходят две ветви: + --------------------------------------------------- на сервере лежит вывод максимума Алисы, + --------------------------------------------------- в локальном репозитории лежит вывод минимума Боба (на сервере его нет!) +* 2d4cef2 code: Возвращен вывод произведения +* 8bff39f code: Подкорректировано оформление +* 71248b0 Добавлен вывод разности файлов +* a0f4cab code: Добавлен вывод суммы чисел +* 1a7913c build: Добавлен файл проекта +* 83e242d code: Заготовка программы +``` +Необходимо поместить коммит Боба на сервер поверх коммита Алисы (то есть восстановить линейную последовательность, +чтобы коммит Боба основывался на коде, получившемся в результате коммита Алисы) +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main) +$ git rebase origin/main +Auto-merging main.cpp +CONFLICT (content): Merge conflict in main.cpp +error: could not apply 5d9e81d... code: Добавлен вывод минимума +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 5d9e81d... code: Добавлен вывод минимума + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) +$ git status +interactive rebase in progress; onto f72cf38 +Last command done (1 command done): +pick 5d9e81d code: Добавлен вывод минимума +No commands remaining. +You are currently rebasing branch 'main' on 'f72cf38'. ------ В настоящее время вы пытаетесь переместить ветку main к f72cf38. +(fix conflicts and then run "git rebase --continue") ------ Исправьте конфликты и продолжите перемещение. +(use "git rebase --skip" to skip this patch) +(use "git rebase --abort" to check out the original branch) + +Unmerged paths: ------ Необъединенные пути!! В обоих случаях изменяется файл main.cpp. +(use "git restore --staged ..." to unstage) +(use "git add ..." to mark resolution) +both modified: main.cpp + +Untracked files: +(use "git add ..." to include in what will be committed) +main.exe +main.o + +no changes added to commit (use "git add" and/or "git commit -a") +``` +Открываю "На машине ```Боба" проект и вижу, что место конфликта отображено в коде графически: +``` +<<<<<<< HEAD +<< "Maximum between A and B = " << max(a,b); +======= +<< "Minimum between A and B = " << min(a,b); +>>>>>>> 5d9e81d (code: Добавлен вывод минимума) +``` +Вручную редактирую код, убрав все системные подсказки и объединив правки Боба и Алисы. Пересобираю проект и проверяю. Работает. + +Продолжаю перемещение: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) +$ git add main.cpp + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) +$ git rebase --continue ------ На этом моменте почему-то внезапно вылезает Vim, закрываю его клавишей Esc и командой :wq. +[detached HEAD a15ac7f] code: Добавлен вывод минимума (fix) +1 file changed, 2 insertions(+), 1 deletion(-) +Successfully rebased and updated refs/heads/main. +``` +Теперь история линейна: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/bob/project (main) +$ git log --all --decorate --graph --oneline +* a15ac7f (HEAD -> main) code: Добавлен вывод минимума (fix) +* f72cf38 (origin/main, origin/HEAD) code: Добавлена печать максимума +* 380aa92 code: Добавлен вывод разности +* 2d4cef2 code: Возвращен вывод произведения +* 8bff39f code: Подкорректировано оформление +* 71248b0 Добавлен вывод разности файлов +* a0f4cab code: Добавлен вывод суммы чисел +* 1a7913c build: Добавлен файл проекта +* 83e242d code: Заготовка программы +``` +## 8. Работа с ветвлением. + +От имени Алисы создаю новую ветку, чтобы сделать в ней изменение типа переменных, не затрагивая при этом основную. +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git branch double + +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +``` +Переключаюсь на "свежую" ветку: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git checkout double +Switched to branch 'double' +``` +Изменяю в коде тип с int на double, пересобираю, заношу под Git все изменения отслеживаемых файлов (в данном случае только main.cpp) +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (double) +$ git add -u +``` +Делаю коммит: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (double) +$ git commit -m 'code: Заменен тип переменных' +[double 22beab3] code: Заменен тип переменных +1 file changed, 1 insertion(+), 1 deletion(-) +``` +Переключаюсь обратно на main: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (double) +$ git checkout main +Switched to branch 'main' +Your branch is up to date with 'origin/main'. +``` +Сливаю временную ветку double и главную ветку main в одну (то есть присоединяю double к main) +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git merge double ------ на этом моменте должен был открыться Vim, но почему-то не открылся. +Updating f72cf38..22beab3 +Fast-forward +main.cpp | 2 +- +1 file changed, 1 insertion(+), 1 deletion(-) +``` +Коммичу факт слияния двух веток: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git commit -m 'branch: Слияние веток main и double' +On branch main +Your branch is ahead of 'origin/main' by 1 commit. +(use "git push" to publish your local commits) + +Untracked files: +(use "git add ..." to include in what will be committed) +.gitignore +main.exe +main.o +project.depend +project.layout + +nothing added to commit but untracked files present (use "git add" to track) +``` +Отправляю изменения на сервер: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 12 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 367 bytes | 367.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/IshutinaYI/cs-lab02.git +f72cf38..22beab3 main -> main +``` +Просматриваю историю: +``` +GSTQ@WIN-CBR6EH59CO3 MINGW64 ~/Desktop/lab02/alice/project (main) +$ git log --oneline --graph --decorate --all +* 22beab3 (HEAD -> main, origin/main, double) code: Заменен тип переменных +* f72cf38 code: Добавлена печать максимума +* 380aa92 code: Добавлен вывод разности +* 2d4cef2 code: Возвращен вывод произведения +* 8bff39f code: Подкорректировано оформление +* 71248b0 Добавлен вывод разности файлов +* a0f4cab code: Добавлен вывод суммы чисел +* 1a7913c build: Добавлен файл проекта +* 83e242d code: Заготовка программы