Отчет по лабораторной работе №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: Заготовка программы