Отчет по лабораторной работе № 2 "Система контроля версий Git" Выполнил: Галкин М. К. Группа: А-03-24 Проверил: Козлюк Д. А. Примечание: работа выполнялась на Windows. 1. Вход в терминал и создание структуры каталогов. Создал на рабочем столе каталог lab02 и запустил в нем Git Bash, приглашение: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02 $ Просмотрел файлы в рабочем каталоге: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02 $ ls u115-04@w10prog-26 MINGW64 ~/Desktop/lab02 $ Создал каталоги Алисы и Боба, изучил команду "cd", создал каталог project в каталоге Алисы: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02 $ mkdir alice u115-04@w10prog-26 MINGW64 ~/Desktop/lab02 $ mkdir bob u115-04@w10prog-26 MINGW64 ~/Desktop/lab02 $ cd bob u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob $ cd .. u115-04@w10prog-26 MINGW64 ~/Desktop/lab02 $ cd alice u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice $ mkdir project u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice $ cd project 2. Инициализация репозитария и настройка Git. Инициализируем репозитарий в текущем каталоге (project): u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project $ git init Initialized empty Git repository in C:/Users/user4/Desktop/lab02/alice/project/.git/ u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (master) $ Поменяем имя ветки main: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (master) $ git branch -m main u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Посмотрим данные папки, где сделано git init: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ ls -A .git/ u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Настроим репозитарий Алисы, чтобы коммиты были от ее имени: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git config user.name 'Alice (GalkinMK)' u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git config user.email 'GalkinMK@mpei.ru' u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ 3. Создание коммитов Запустим CodeBlocks и создадим проект в репозитарии Алисы. Имеем следующую структуру файлов и каталогов: lab02 ├── alice │ └── project <--------- текущий рабочий каталог │ ├── .git <--------- создан командой "git init" │ ├── bin <--------- создан CodeBlocks при сборке │ ├── obj <--------- (то же самое) │ ├── main.cpp <-- код программы │ └── project.cbp <-- файл проекта └── bob Вернемся в Git Bash, просмотрим состояние рабочей копии: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main <------- ветка на которой находимся No commits yet <------- сообщается, что нет коммитов Untracked files: <------- git обнаружил файлы, но он их не отслеживает (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) <---- ничего не было добавлено в область подготовленных файлов, но есть не отслеживаемые файлы. u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Добавим файл main.cpp в индекс: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Посмотрим изменения: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main No commits yet Changes to be committed: <----- показывает файлы, которые подготовлены и будут включены в следующий коммит. (use "git rm --cached ..." to unstage) new file: main.cpp Untracked files: (use "git add ..." to include in what will be committed) bin/ obj/ project.cbp u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Выполним коммит с файлом main.cpp: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: заготовка программы' [main (root-commit) aacbacc] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Добавим файл project.cbp в индекс и сделаем коммит с ним: u115-04@w10prog-26 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 u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'build: добавлен файл проекта' [main 2f7477c] build: добавлен файл проекта 1 file changed, 40 insertions(+) create mode 100644 project.cbp u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ 4. Создание коммитов с изменениями. Заменим тело функции main() на ввод двух чисел. u115-04@w10prog-26 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: 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") Юля Д@JuliaNote MINGW64 ~/Desktop/lab02/alice/project (main) $ Cпособ 1. Сначала выбрем файлы, изменения которых должны войти в коммит, затем сделаем коммит: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code; вывод двух чисел' [main 190e4bf] code; вывод двух чисел 1 file changed, 4 insertions(+), 2 deletions(-) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Добавим в программу вывод суммы a и b. Способ 2. Добавим в индекс все изменения, затем сделаем коммит. u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git add -u u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: вывод суммы' [main 7e1a6b6] code: вывод суммы 1 file changed, 1 insertion(+) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Добавим в программу вывод разности a и b. Способ 3. Добавим все изменения в индекс и сделаем коммит в один шаг. u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m 'code: вывод разности' [main a2812cc] code: вывод разности 1 file changed, 2 insertions(+), 1 deletion(-) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ 5. Игнорирование файлов. Укажем Git игнорировать присутствие каталога bin. Для этого создадим в CodeBlocks новый файл (File → New... → Empty) и запишем в него строку: /bin. Выполнив git status, можно видеть, что каталог bin не отображается: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main 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) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Занесем в список игнорируемых каталоги bin и git и файлы *.layout: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main 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) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Создадим коммит с .gitignore: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git add .gitignore u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m 'git: игнорирование' [main eb56849] git: игнорирование 1 file changed, 2 insertions(+) create mode 100644 .gitignore u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ 6. Просмотр истории. Пробуем команду git log: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log commit eb568497b89756165bf95582a5c687cc6a958502 (HEAD -> main) Author: Alice (GalkinMK) Date: Mon Mar 17 14:45:18 2025 +0300 git: игнорирование commit a2812cc067a457303cb7513962b4ddaf2137f6f9 Author: Alice (GalkinMK) Date: Mon Mar 17 14:42:52 2025 +0300 code: вывод разности commit 7e1a6b64366d9d5089fe2fdb5c79e174f8c7c43b Author: Alice (GalkinMK) Date: Mon Mar 17 14:41:32 2025 +0300 code: вывод суммы commit 190e4bf98c1e6895a2e97f7464969d8c5f62a42e Author: Alice (GalkinMK) Date: Mon Mar 17 14:40:20 2025 +0300 code; вывод двух чисел commit 2f7477c8c55850d2a0bce28a8ecd860387ed6e96 Author: Alice (GalkinMK) Date: Mon Mar 17 14:38:34 2025 +0300 build: добавлен файл проекта commit aacbacc4af7c2cb7f57648a1dc668becc0c518ed Author: Alice (GalkinMK) Date: Mon Mar 17 14:37:55 2025 +0300 code: заготовка программы u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Пробуем команду git log --stat: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --stat commit eb568497b89756165bf95582a5c687cc6a958502 (HEAD -> main) <--- хэш коммита, HEAD указывает на main Author: Alice (GalkinMK) <--- Автор Date: Mon Mar 19 14:45:18 2025 +0300 <--- Дата git: игнорирование <--- Сообщение коммита .gitignore | 2 ++ <--- Изменен в gitignore, добавлено 2 строчки 1 file changed, 2 insertions(+) <--- Изменен один файл. commit a2812cc067a457303cb7513962b4ddaf2137f6f9 Author: Alice (GalkinMK) Date: Mon Mar 17 14:42:52 2025 +0300 code: вывод разности main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 7e1a6b64366d9d5089fe2fdb5c79e174f8c7c43b Author: Alice (GalkinMK) Date: Mon Mar 17 14:41:32 2025 +0300 code: вывод суммы main.cpp | 1 + 1 file changed, 1 insertion(+) commit 190e4bf98c1e6895a2e97f7464969d8c5f62a42e Author: Alice (GalkinMK) Date: Mon Mar 17 14:40:20 2025 +0300 code; вывод двух чисел main.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 2f7477c8c55850d2a0bce28a8ecd860387ed6e96 Author: Alice (GalkinMK) Date: Mon Mar 17 14:38:34 2025 +0300 build: добавлен файл проекта project.cbp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) commit aacbacc4af7c2cb7f57648a1dc668becc0c518ed Author: Alice (GalkinMK) Date: Mon Mar 17 14:37:55 2025 +0300 code: заготовка программы main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Пробуем команду git log --oneline --decorate: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate eb56849 (HEAD -> main) git: игнорирование a2812cc code: вывод разности 7e1a6b6 code: вывод суммы 190e4bf code; вывод двух чисел 2f7477c build: добавлен файл проекта aacbacc code: заготовка программы u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Пробуем команду git log --oneline --decorate --all --graph: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * eb56849 (HEAD -> main) git: игнорирование * a2812cc code: вывод разности * 7e1a6b6 code: вывод суммы * 190e4bf code; вывод двух чисел * 2f7477c build: добавлен файл проекта * aacbacc code: заготовка программы u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Коммиты по теме build: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --grep "build:" commit 2f7477c8c55850d2a0bce28a8ecd860387ed6e96 Author: Alice (GalkinMK) Date: Mon Mar 17 14:38:34 2025 +0300 build: добавлен файл проекта u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Коммиты затрагивающие project.cbp: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log -- project.cbp commit 2f7477c8c55850d2a0bce28a8ecd860387ed6e96 Author: Alice (GalkinMK) Date: Mon Mar 17 14:38:34 2025 +0300 build: добавлен файл проекта u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Посмотрим коммит тремя способами: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git show HEAD commit eb568497b89756165bf95582a5c687cc6a958502 (HEAD -> main) Author: Alice (GalkinMK) Date: Mon Mar 17 14:45:18 2025 +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 u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git show main commit eb568497b89756165bf95582a5c687cc6a958502 (HEAD -> main) Author: Alice (GalkinMK) Date: Wed Mar 19 21:45:18 2025 +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 u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Посмотрим предпоследний коммит: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git show a2812cc commit a2812cc067a457303cb7513962b4ddaf2137f6f9 Author: Alice (GalkinMK) Date: Mon Mar 17 14:42:52 2025 +0300 code: вывод разности diff --git a/main.cpp b/main.cpp index 1967dd8..984c3d6 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'; } u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Внесем изменения в main.cpp: добавим печать произведения чисел, но не станем пока делать коммит. Используем команду git diff: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff diff --git a/main.cpp b/main.cpp <--- показывает, что сравниваются два файла index 984c3d6..ef525e5 100644 <--- хэши версии файла до и после, права доступа к файлу --- a/main.cpp <--- версия файла до изменений +++ b/main.cpp <--- версия файла после изменений @@ -8,6 +8,7 @@ int main() <--- контекст изменения, в старой версии изменения с 8 строки и затрагиваются 6 строк. в новой версии файла с 8 строки и затрагивают 7 строк. 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'; <--- строки начинающиеся с - показывают удаленные строки, строки с + показывают добавленные } u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Просмотрим изменения между самым первым коммитом и коммитом, добавляющим вывод разности: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff HEAD~3 HEAD~1 diff --git a/main.cpp b/main.cpp index 842760d..984c3d6 100644 --- a/main.cpp +++ b/main.cpp @@ -7,5 +7,7 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; } u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ 7. Откат изменений. Выполним коммит произведения: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m 'code: вывод произведения' [main 5e34991] code: вывод произведения 1 file changed, 2 insertions(+), 1 deletion(-) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Выполним откат изменений: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git reset --hard HEAD~1 HEAD is now at eb56849 git: игнорирование u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Добавим над функцией main() комментарий: // you may type whatever you want Откатим этот файл к состоянию в последнем коммите: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout HEAD -- main.cpp u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ 8. Обмен кодом через удаленное хранилище. Зарегестрируемся на Git УИТ. Создал пару ключей: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ ssh-keygen Generating public/private ed25519 key pair. Enter file in which to save the key (/c/Users/u115-04/.ssh/id_ed25519): /c/Users/u115-04/.ssh/id_ed25519 already exists. Overwrite (y/n)? y Enter passphrase for "/c/Users/u115-04/.ssh/id_ed25519" (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/u115-04/.ssh/id_ed25519 Your public key has been saved in /c/Users/u115-04/.ssh/id_ed25519.pub The key fingerprint is: SHA256:H7EbOSgDNypJxezP0TuZhLEijHpI7Ud6XoAJLUWyz0w u115-04@w10prog-26 The key's randomart image is: +--[ED25519 256]--+ | .+=. | | oooo . | | +=E+ o= . | |.oB=o*+.o. + | |o.+=+++oS+* | |o .+ oo+=. = | | . + . .o | | . | | | +----[SHA256]-----+ u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ eval $(ssh-agent -s) Agent pid 993 u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ ssh-add Enter passphrase for /c/Users/Юля Д/.ssh/id_ed25519: Identity added: /c/Users/Юля Д/.ssh/id_ed25519 (Юля Д@JuliaNote) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Открытый ключ: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINlSlTGkxZBE+5YR4YGxyPwRWIHxCiZbNWwAOVScd8B+ Юля Д@JuliaNote u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Скопировал открытый ключ и добавил в список открытых ключей своей учетной записи. u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git remote add origin git@uit.mpei.ru:DmitriyevDM/cs-lab02.git u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git push -u origin main Enumerating objects: 18, done. Counting objects: 100% (18/18), done. Delta compression using up to 16 threads Compressing objects: 100% (16/16), done. Writing objects: 100% (18/18), 2.29 KiB | 234.00 KiB/s, done. Total 18 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:DmitriyevDM/cs-lab02.git * [new branch] main -> main branch 'main' set up to track 'origin/main'. u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ 8. Клонирование проекта сервера. Клонируем проект: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob $ git clone git@uit.mpei.ru:GalkinMK/cs-lab02.git project Cloning into 'project'... Enter passphrase for key '/c/Users/u115-04/.ssh/id_ed25519': remote: Enumerating objects: 18, done. remote: Counting objects: 100% (18/18), done. remote: Compressing objects: 100% (16/16), done. remote: Total 18 (delta 2), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (18/18), done. Resolving deltas: 100% (2/2), done. u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob $ "На машине Боба" настроим Git, как это делалось для Алисы: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.name 'Bob (GalkinMK)' u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git config user.email 'GalkinMK@mpei.ru' u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ «На машине Боба» добавим в программу печать произведения чисел и сделаем коммит. Просмотрим последний коммит и убедимся, что он сделан от имени Боба. no changes added to commit (use "git add" and/or "git commit -a") u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git commit -a -m 'code: печать произведения двух чисел' [main 5008498] code: печать произведения двух чисел 1 file changed, 2 insertions(+), 1 deletion(-) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git log commit 5008498cb68167ac1a314668d5db04f58032ae26 (HEAD -> main) Author: Bob (GalkinMK) Date: Mon Mar 24 14:29:50 2025 +0300 code: печать произведения двух чисел commit eb568497b89756165bf95582a5c687cc6a958502 (origin/main, origin/HEAD) Author: Alice (GalkinMK) Date: Mon Mar 17 14:45:18 2025 +0300 git: игнорирование commit a2812cc067a457303cb7513962b4ddaf2137f6f9 Author: Alice (GalkinMK) Date: Mon Mar 17 14:42:52 2025 +0300 code: вывод разности commit 7e1a6b64366d9d5089fe2fdb5c79e174f8c7c43b Author: Alice (GalkinMK) Date: Mon Mar 17 14:41:32 2025 +0300 code: вывод суммы commit 190e4bf98c1e6895a2e97f7464969d8c5f62a42e Author: Alice (GalkinMK) Date: Mon Mar 17 14:40:20 2025 +0300 code; вывод двух чисел commit 2f7477c8c55850d2a0bce28a8ecd860387ed6e96 Author: Alice (GalkinMK) Date: Mon Mar 17 14:38:34 2025 +0300 build: добавлен файл проекта commit aacbacc4af7c2cb7f57648a1dc668becc0c518ed Author: Alice (GalkinMK) Date: Mon Mar 17 14:37:55 2025 +0300 code: заготовка программы u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ Отправим коммит на сервер: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git push Enter passphrase for key '/c/Users/Юля Д/.ssh/id_ed25519': Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 436 bytes | 218.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:GalkinMK/cs-lab02.git eb56849..5008498 main -> main u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ «На машине Алисы» выполним загрузку изменений: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git fetch remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 416 bytes | 41.00 KiB/s, done. From uit.mpei.ru:GalkinMK/cs-lab02 eb56849..5008498 main -> origin/main u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Просмотрим историю всех веток: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 5008498 (origin/main, origin/HEAD) code: печать произведения двух чисел * eb56849 (HEAD -> main) git: игнорирование * a2812cc code: вывод разности * 7e1a6b6 code: вывод суммы * 190e4bf code; вывод двух чисел * 2f7477c build: добавлен файл проекта * aacbacc code: заготовка программы u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Продвинем ветку main к скачанной версии: Юля Д@JuliaNote MINGW64 ~/Desktop/lab02/alice/project (main) $ git pull --ff-only Updating eb56849..5008498 Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ «От имени Алисы» добавим в программу печать деления, сделаем коммит, отправим его на сервер и получим новую версию «на машине Боба»: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m 'code: деление двух чисел' [main b736caf] code: деление двух чисел 1 file changed, 2 insertions(+), 1 deletion(-) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 417 bytes | 208.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:GalkinMK/cs-lab02.git 5008498..b736caf main -> main u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git fetch Enter passphrase for key '/c/Users/Юля Д/.ssh/id_ed25519': remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 397 bytes | 18.00 KiB/s, done. From uit.mpei.ru:GalkinMK/cs-lab02 5008498..b736caf main -> origin/main u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * b736caf (origin/main, origin/HEAD) code: деление двух чисел * 5008498 (HEAD -> main) code: печать произведения двух чисел * eb56849 git: игнорирование * a2812cc code: вывод разности * 7e1a6b6 code: вывод суммы * 190e4bf code; вывод двух чисел * 2f7477c build: добавлен файл проекта * aacbacc code: заготовка программы u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git pull --ff-only Enter passphrase for key '/c/Users/u115-04/.ssh/id_ed25519': Updating 5008498..b736caf Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) u115-04@w10prog-26 ~/Desktop/lab02/bob/project (main) $ 9. Разрешение конфликтов правок при совместной работе. «На машине Алисы» дополним программу печатью максимума, сделаем коммит и отправим его на сервер: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m 'code: печать максимума' [main 406555c] code: печать максимума 1 file changed, 2 insertions(+), 1 deletion(-) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 421 bytes | 210.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:GalkinMK/cs-lab02.git b736caf..406555c main -> main u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ «На машине Боба» дополним программу печатью минимума, сделаем коммит и попытаемся отправить его на сервер: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git commit -a -m 'code: печать минимума' [main ca785f5] code: печать минимума 1 file changed, 2 insertions(+), 1 deletion(-) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git push Enter passphrase for key '/c/Users/u115-04/.ssh/id_ed25519': To uit.mpei.ru:GalkinMK/cs-lab02.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'uit.mpei.ru:DmitriyevDM/cs-lab02.git' hint: Updates were rejected because the remote contains work that you do not hint: have locally. This is usually caused by another repository pushing to hint: the same ref. If you want to integrate the remote changes, use hint: 'git pull' before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ Как можно видеть, удаленный репозитарий не принимает изменений: коммит Боба основан не на последнем существующем коммите. «От лица Боба» загрузим коммиты из удаленного хранилища и отобразим историю всех веток: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git fetch Enter passphrase for key '/c/Users/u115-04/.ssh/id_ed25519': remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 401 bytes | 28.00 KiB/s, done. From uit.mpei.ru:GalkinMK/cs-lab02 b736caf..406555c main -> origin/main u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * ca785f5 (HEAD -> main) code: печать минимума | * 406555c (origin/main, origin/HEAD) code: печать максимума |/ * b736caf code: деление двух чисел * 5008498 code: печать произведения двух чисел * eb56849 git: игнорирование * a2812cc code: вывод разности * 7e1a6b6 code: вывод суммы * 190e4bf code; вывод двух чисел * 2f7477c build: добавлен файл проекта * aacbacc code: заготовка программы u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ Нужно поместить коммит Боба, поверх коммита Алисы: u115-04@w10prog-26 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 ca785f5... 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". hint: Disable this message with "git config set advice.mergeConflict false" Could not apply ca785f5... code: печать минимума u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) $ Эта команда завершается с ошибкой, сообщающей о конфликте в main.cpp. Посмотрим состояние хранилища: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) $ git status interactive rebase in progress; onto 406555c <---- в данный момент выполняется rebase Last command done (1 command done): pick ca785f5 code: печать минимума No commands remaining. You are currently rebasing branch 'main' on '406555c'. (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: <----- конфликт слияния (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) no changes added to commit (use "git add" and/or "git commit -a") u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1) $ Git status говорит нам, что мы находимся в середине rebase, возник конфликт в main.cpp. Удалим метки конфликта, отредактируем код(включает правки Алисы и Боба), программа компилируется и работает. Добавил файл в индекс и продолжил прерваннуб операцию rebase: [detached HEAD cc3acbc] code: печать минимума 1 file changed, 2 insertions(+), 2 deletions(-) Successfully rebased and updated refs/heads/main. u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git status 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) nothing added to commit but untracked files present (use "git add" to track) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ git push Enter passphrase for key '/c/Users/u115-04/.ssh/id_ed25519': Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 419 bytes | 209.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:GalkinMK/cs-lab02.git 406555c..cc3acbc main -> main u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/bob/project (main) $ 10. Использование веток. Создадим ветку double: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git branch double u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Переключимся на нее: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git checkout double Switched to branch 'double' u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (double) $ В коде заменим тип переменных a и b на double и сделаем коммит: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (double) $ git commit -a -m 'code: переменные типа double' [double d79a012] code: переменные типа double 1 file changed, 1 insertion(+), 1 deletion(-) Переключимся на ветку main: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (double) $ git checkout main Switched to branch 'main' Your branch is up to date with 'origin/main'. u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Посмотрим историю всех веток: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --graph --decorate --oneline --all * d79a012 (double) code: переменные типа double * 406555c (HEAD -> main, origin/main, origin/HEAD) code: печать максимума * b736caf code: деление двух чисел * 5008498 code: печать произведения двух чисел * eb56849 git: игнорирование * a2812cc code: вывод разности * 7e1a6b6 code: вывод суммы * 190e4bf code; вывод двух чисел * 2f7477c build: добавлен файл проекта * aacbacc code: заготовка программы u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ Сольем ветку double в main: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git merge double Updating 406555c..d79a012 Fast-forward main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ История всех веток: u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --graph --decorate --oneline --all * d79a012 (HEAD -> main, double) code: переменные типа double * 406555c (origin/main, origin/HEAD) code: печать максимума * b736caf code: деление двух чисел * 5008498 code: печать произведения двух чисел * eb56849 git: игнорирование * a2812cc code: вывод разности * 7e1a6b6 code: вывод суммы * 190e4bf code; вывод двух чисел * 2f7477c build: добавлен файл проекта * aacbacc code: заготовка программы u115-04@w10prog-26 MINGW64 ~/Desktop/lab02/alice/project (main) $