rybin@Bomba MINGW64 ~ $ cd C: rybin@Bomba MINGW64 /c $ cd Users rybin@Bomba MINGW64 /c/Users $ cd Rybin rybin@Bomba MINGW64 /c/Users/Rybin $ cd OneDrive rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive $ cd Desktop rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop $ cd lab02 Ход работы: Вход в терминал и создание структуры каталогов Создаем папки пользователей (mkdir alice, mkdir bob) В папке пользователя alice создаем папку project Инициализация репозитария и настройка Git: Инициализируем хранилище git (git init) Настраиваем папки пользователя, с которым будем работать: rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02 $ mkdir alice rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02 $ mkdir bob rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02 $ cd alice rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice $ mkdir project rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice $ cd project rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project $ cd .. rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice $ cd project rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project $ git init Initialized empty Git repository in C:/Users/rybin/OneDrive/Desktop/lab02/alice/project/.git/ Создание коммитов: Занесение файлов под контроль версий rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (master) $ git branch -m main rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ ls -A .git/ rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git config user.name 'Alice (StepanovaKY)' rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git config user.email 'StepanovaKY@empei.ru' Просматриваем состояние рабочей копии(git status) rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git status On branch main No commits yet Untracked files: (use "git add ..." to include in what will be committed) bin/ main.cpp obj/ project.cbp nothing added to commit but untracked files present (use "git add" to track) В первой строке ссылка HEAD указывает на ветку main Вторая стр. говорит о том, что еще не было создано коммитов Третья стр. показывает не отслеживаемые файлы в хранилище git, и подсказывает как их добавить Последняя стр. говорит о том, что нет добавленных (отслеживаемых) файлов, которые можно будет закоммитить Добавляем файл с кодом и просматриваем изменения rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git add main.cpp rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/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 Появилась строка с файлами в индексе, стоящими в очереди на коммит Составление сообщений к коммитам Создаем 2 коммита с информацией о коде программы rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git commit -m 'code: заготовка программы' [main (root-commit) e6e2269] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/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 rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git status On branch main Changes to be committed: (use "git restore --staged ..." to unstage) new file: project.cbp rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git commit -m 'build: добавлен файл проекта' [main 57f1f4f] build: добавлен файл проекта 1 file changed, 40 insertions(+) create mode 100644 project.cbp После добавления в программу ввода 2х чисел видим, что файл main.cpp был изменен rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/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 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") Проделываем ряд изменений с кодом программы и делаем коммиты суммы и разности rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git add main.cpp rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git commit -m 'code: добавлен ввод чисел и вывод их суммы и разности' [main f35c583] code: добавлен ввод чисел и вывод их суммы и разности 1 file changed, 3 insertions(+), 2 deletions(-) Игнорирование файлов Укажем Git игнорировать присутствие каталога bin и obj rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/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) rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git add .gitignore rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git commit -m 'git: игнорирование бинарных файлов' [main 1dc38fd] git: игнорирование бинарных файлов 1 file changed, 3 insertions(+) create mode 100644 .gitignore git: добавлен файл .gitignore для игнорирования каталогов bin и obj Просмотр истории: С помощью команды git log и различных ее опций просматриваем журнал коммитов Используем команду git log –stat commit f35c5833ccc51b116c8ce1836e365319595d6cdf Author: Alice (StepanovaKY) Date: Mon Mar 24 13:25:32 2025 +0300 code: добавлен ввод чисел и вывод их суммы и разности commit 57f1f4feaa3d50491f4d4ef26a52bd7b86242561 Author: Alice (StepanovaKY) Date: Mon Mar 24 11:07:59 2025 +0300 build: добавлен файл проекта commit e6e22691cdb433025be59b85dd526be2fd0017a4 Author: Alice (StepanovaKY) Date: Mon Mar 24 11:03:57 2025 +0300 code: заготовка программы В последнем коммите первой строкой показывается хэш коммита, по которому можно потом найти этот коммит Во 2 стр. записан автор, внесший этот коммит, а стр. ниже – время создания коммита Далее идет комментарий к коммиту Перечисление файлов, в которых произошли изменения и кол-во измененных строчек(“+” добавленная стр., “-” удаленная стр.) В последней стр. приведена статистика изменений данных файлов (Использование других способов просмотра истории) rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git log commit e10fefcdfc9578bf5561d214853dd269e3c7bae5 (HEAD -> main) Author: Alice (StepanovaKY) Date: Mon Mar 24 13:34:38 2025 +0300 git: добавлен файл .gitignore для игнорирования каталогов bin и obj commit f35c5833ccc51b116c8ce1836e365319595d6cdf Author: Alice (StepanovaKY) Date: Mon Mar 24 13:25:32 2025 +0300 code: добавлен ввод чисел и вывод их суммы и разности commit 57f1f4feaa3d50491f4d4ef26a52bd7b86242561 Author: Alice (StepanovaKY) Date: Mon Mar 24 11:07:59 2025 +0300 build: добавлен файл проекта commit e6e22691cdb433025be59b85dd526be2fd0017a4 Author: Alice (StepanovaKY) Date: Mon Mar 24 11:03:57 2025 +0300 code: заготовка программы rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git log --stat commit e10fefcdfc9578bf5561d214853dd269e3c7bae5 (HEAD -> main) Author: Alice (StepanovaKY) Date: Mon Mar 24 13:34:38 2025 +0300 git: добавлен файл .gitignore для игнорирования каталогов bin и obj .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit f35c5833ccc51b116c8ce1836e365319595d6cdf Author: Alice (StepanovaKY) Date: Mon Mar 24 13:25:32 2025 +0300 code: добавлен ввод чисел и вывод их суммы и разности main.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 57f1f4feaa3d50491f4d4ef26a52bd7b86242561 Author: Alice (StepanovaKY) Date: Mon Mar 24 11:07:59 2025 +0300 build: добавлен файл проекта rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git log --oneline --decorate e10fefc (HEAD -> main) git: добавлен файл .gitignore для игнорирования каталогов bin и obj f35c583 code: добавлен ввод чисел и вывод их суммы и разности 57f1f4f build: добавлен файл проекта e6e2269 code: заготовка программы rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * e10fefc (HEAD -> main) git: добавлен файл .gitignore для игнорирования каталогов bin и obj * f35c583 code: добавлен ввод чисел и вывод их суммы и разности * 57f1f4f build: добавлен файл проекта * e6e2269 code: заготовка программы rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git log --grep 'build' commit 57f1f4feaa3d50491f4d4ef26a52bd7b86242561 Author: Alice (StepanovaKY) Date: Mon Mar 24 11:07:59 2025 +0300 build: добавлен файл проекта rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git log -- project.cbp commit 57f1f4feaa3d50491f4d4ef26a52bd7b86242561 Author: Alice (StepanovaKY) Date: Mon Mar 24 11:07:59 2025 +0300 build: добавлен файл проекта Просмотр коммитов Используем команды для просмотра отдельных коммитов(git log –main.cpp/ git log –grep “code: ”) rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main)$ git log --grep 'build:' commit 57f1f4feaa3d50491f4d4ef26a52bd7b86242561 Author: Alice (StepanovaKY) Date: Mon Mar 24 11:07:59 2025 +0300 build: add project file rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main)$ git log -- project.cbp commit 57f1f4feaa3d50491f4d4ef26a52bd7b86242561 Author: Alice (AngelovI) Date: Mon Mar 24 11:07:59 2025 +0300 build: add project file (Таким способом мы просмотрели информацию о коммите по измененному файлу и по теме коммита) Далее тремя способами просматриваем информацию о предпоследнем коммите rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git show HEAD commit e10fefcdfc9578bf5561d214853dd269e3c7bae5 (HEAD -> main) Author: Alice (StepanovaKY) Date: Mon Mar 24 13:34:38 2025 +0300 git: добавлен файл .gitignore для игнорирования каталогов bin и obj diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9d83ebf --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +*.layout rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git show main commit e10fefcdfc9578bf5561d214853dd269e3c7bae5 (HEAD -> main) Author: Alice (StepanovaKY) Date: Mon Mar 24 13:34:38 2025 +0300 git: добавлен файл .gitignore для игнорирования каталогов bin и obj diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9d83ebf --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +*.layout rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git show d2e8af fatal: ambiguous argument 'd2e8af': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git [...] -- [...]' rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git show 9d83ebf /bin /obj *.layout rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git show HEAD~1 commit f35c5833ccc51b116c8ce1836e365319595d6cdf Author: Alice (StepanovaKY) Date: Mon Mar 24 13:25:32 2025 +0300 code: добавлен ввод чисел и вывод их суммы и разности diff --git a/main.cpp b/main.cpp index b4392ec..eac5055 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,7 @@ using namespace std; int main() { - cout << "Hello world!" << endl; - return 0; + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; } rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git show main~1 commit f35c5833ccc51b116c8ce1836e365319595d6cdf Author: Alice (StepanovaKY) Date: Mon Mar 24 13:25:32 2025 +0300 code: добавлен ввод чисел и вывод их суммы и разности diff --git a/main.cpp b/main.cpp index b4392ec..eac5055 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,7 @@ using namespace std; int main() { - cout << "Hello world!" << endl; - return 0; + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; } rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git diff diff --git a/main.cpp b/main.cpp index eac5055..a2358eb 100644 --- a/main.cpp +++ b/main.cpp @@ -7,4 +7,8 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; + cout << "A + B = " << a + b << '\n'; + cout << "A - B = " << a - b << '\n'; + cout << "A * B = " << a * b << '\n'; + } rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git diff HEAD~2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9d83ebf --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin +/obj +*.layout diff --git a/main.cpp b/main.cpp index b4392ec..a2358eb 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,11 @@ using namespace std; int main() { - cout << "Hello world!" << endl; - return 0; + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + cout << "A + B = " << a + b << '\n'; Добавим изменения в рабочую копию и посмотрим их с помощью команды git diff rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git diff diff --git a/main.cpp b/main.cpp index b4392ec..a2358eb 100644 --- a/main.cpp +++ b/main.cpp @@ -8,6 +8,7 @@ int main() int a, b; cin >> a >> b; cout << "A + B = " << a + b << '\n' - << "A - B = " << a - b << '\n'; + << "A - B = " << a - b << '\n' + << "A * B = " << a * b << '\n'; return 0; } В качестве первой стр. мы видим входные данные команды для сравнения файлов Далее идет заголовок с легендой изменения, место измененного кода и измененная функция На след. строке идут строки вокруг измененной части, удаленные и добавленные строки Откат изменений Вносим изменения в код, а потом откатываем их до состояния в опр. коммите с помощью команды git reset rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git commit -m 'вывод произведения' [main c41ed97] вывод произведения 1 file changed, 2 insertions(+), 1 deletion(-) rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git reset --hard HEAD~1 HEAD is now at 1dc38fd git: игнорирование бинарных файлов rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git checkout HEAD -- main.cpp Обмен кодом через удаленное хранилище Обмен кодом через удалённое хранилище. Для загрузки данных в репозитарий GitHub будет использоваться протокол SSH. Поэтому для обмена данными с сервером нужно сгенерировать пару из открытого и закрытого ключей. rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ ssh-keygen Generating public/private ed25519 key pair. Enter file in which to save the key (/c/Users/rybin/.ssh/id_ed25519): Created directory '/c/Users/rybin/.ssh'. Enter passphrase for "/c/Users/rybin/.ssh/id_ed25519" (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/rybin/.ssh/id_ed25519 Your public key has been saved in /c/Users/rybin/.ssh/id_ed25519.pub The key fingerprint is: SHA256:YsaIzPpwHTaBQqBGQam9BykmtgY0s12248qTX1MJ7CE rybin@Bomba The key's randomart image is: +--[ED25519 256]--+ |+=o | |+= . o. | |=o*.+E.+ | |*B+o *o o . | |=.=o* *.So | | +.o.* .. | |+ o.+ o | | + = . . | | . o. | +----[SHA256]-----+ Также после этого отображаются уникальные данные для ключа. Поскольку в работе вводить пароль при каждом использовании ключа может быть неудобно, можно использовать программу-агент, которую достаточно запустить перед началом работы: rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ eval $(ssh-agent -s) Agent pid 760 rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ ssh-add Enter passphrase for /c/Users/rybin/.ssh/id_ed25519: Identity added: /c/Users/rybin/.ssh/id_ed25519 (rybin@Bomba) rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAQ2E0GWYIDA5NLS58pgx1ol7mBFIA2NC2Bs06kyzQmG rybin@Bomba Затем в настройках аккаунта GitHub нужно добавить публичный ключ, который по умолчанию записывается в файл id_rsa.pub. Теперь добавим репозитарий на который будем загружать хранилище git, и загрузим хранилище git на GitHub с помощью команды git push. rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git remote add origin git@uit.mpei.ru:StepanovaKY/project.git rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git push -u origin main Enumerating objects: 15, done. Counting objects: 100% (15/15), done. Delta compression using up to 12 threads Compressing objects: 100% (13/13), done. Writing objects: 100% (15/15), 1.98 KiB | 1015.00 KiB/s, done. Total 15 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:StepanovaKY/cs-lab02.git * [new branch] main -> main branch 'main' set up to track 'origin/main'. rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/alice/project (main) $ git remote -v origin git@uit.mpei.ru:StepanovaKY/cs-lab02.git (fetch) origin git@uit.mpei.ru:StepanovaKY/cs-lab02.git (push) К работе присоединяется боб. Клонируем репозитарий с помощью git clone. rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/bob $ git clone git@uit.mpei.ru:StepanovaKY/cs-lab02.git project Cloning into 'project'... remote: Enumerating objects: 15, done. remote: Counting objects: 100% (15/15), done. remote: Compressing objects: 100% (12/12), done. remote: Total 15 (delta 1), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (15/15), done. Resolving deltas: 100% (1/1), done. Настроим хранилище боба rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/bob/project (main) $ git config user.name 'Bob (StepanovaKY)' rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/bob/project (main) $ git config user.email 'StepanovaKY@mpei.ru' Боб добавляет новый коммит, опережающий версию на сервере, и загружает его на GitHub. Вантуз@DESKTOP-RJ2P0PB MINGW64 ~/Desktop/laba02/bob/project (main) $ git add main.cpp rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/bob/project (main) $ git commit -m 'code: вывод произведения' [main b0667fd] code: вывод произведения 1 file changed, 2 insertions(+), 1 deletion(-) rybin@Bomba MINGW64 /c/Users/Rybin/OneDrive/Desktop/lab02/bob/project (main) $ git push Enter passphrase for key '/c/Users/Rybin/.ssh/id_rsa': 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), 384 bytes | 384.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:StepanovaKY/cs-lab02.git 1dc38fd..b0667fd main -> main Обновляем версию программы у Алисы. Для этого загружаем загрузку изменений с помощью git fetch. А затем переносим ветку main на скачанную версию с помощью git pull (который, вообще говоря, все равно вызывает git fetch, поэтому его ручной вызов не обязателен). rybin@Bomba MINGW64 ~/OneDrive/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), 364 bytes | 24.00 KiB/s, done. From uit.mpei.ru:StepanovaKY/cs-lab02 1dc38fd..b0667fd main -> origin/main rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * b0667fd (origin/main) code: вывод произведения * 1dc38fd (HEAD -> main) git: игнорирование бинарных файлов * 62b8365 code: вывод разности * 3b9353a code: вывод суммы * 9ca7d49 build: add project file * 9f4438c code: заготовка программы rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git pull --ff-only Updating 1dc38fd..b0667fd Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Далее Алиса вносит новое изменение, а Боб его скачивает. rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git add main.cpp rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git commit -m 'code: вывод деления' [main a959899] code: вывод деления 1 file changed, 2 insertions(+), 1 deletion(-) rybin@Bomba MINGW64 ~/OneDrive/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), 396 bytes | 396.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:StepanovaKY/cs-lab02.git b0667fd..a959899 main -> main rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main) $ git fetch Enter passphrase for key '/c/Users/Вантуз/.ssh/id_rsa': remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 376 bytes | 18.00 KiB/s, done. From uit.mpei.ru:StepanovaKY/cs-lab02 b0667fd..a959899 main -> origin/main rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main) $ git pull --ff-only Enter passphrase for key '/c/Users/Вантуз/.ssh/id_rsa': Updating b0667fd..a959899 Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Теперь Алиса и Боб добавляют в программу печать максимума и минимума соответственно, а затем пробуют загрузить изменения на репозитарий на сервере. rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git add main.cpp rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git commit -m 'code: вывод максимума' [main a262594] code: вывод максимума 1 file changed, 2 insertions(+) rybin@Bomba MINGW64 ~/OneDrive/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), 434 bytes | 434.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:StepanovaKY/cs-lab02.git a959899..a262594 main -> main (боб) rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main) $ git add main.cpp rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main) $ git commit -m 'code: вывод минимума' [main 38a334c] code: вывод минимума 1 file changed, 2 insertions(+), 2 deletions(-) rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main) $ git push Enter passphrase for key '/c/Users/rybin/.ssh/id_rsa': To uit.mpei.ru:AngelovI/cs-lab02.git ! [rejected] main -> main (non-fast-forward) error: failed to push some refs to 'uit.mpei.ru:StepanovaKY/cs-lab02.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. If you want to integrate the remote changes, hint: use 'git pull' before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. (Однако загрузить на сервер изменения получается только у Алисы потому, что Боб затем пытается загрузить версию, основанную на более старом коммите, чем самый новый коммит в репозитарии GitHub.) Загрузим версию с сервера rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main) $ git fetch Enter passphrase for key '/c/Users/rybin/.ssh/id_rsa': rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 751cb56 (HEAD -> main) code: вывод минимума | * a262594 (origin/main, origin/HEAD) code: вывод максимума |/ * a959899 code: вывод деления * b0667fd code: вывод произведения * 1dc38fd git: игнорирование бинарных файлов * 62b8365 code: вывод разности * 3b9353a code: вывод суммы * 9ca7d49 build: add project file * 9f4438c code: заготовка программы (Ветка main раздвоилась.) Объединим коммиты Боба и Алисы, поместив коммит Боба выше с помощью комманды git rebase. rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main) $ git rebase origin/main Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp error: could not apply 751cb56... 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 751cb56... code: вывод минимума Комманда завершается с ошибкой из-за конфликта в файле с кодом main.cpp. Производный файл от файла Алисы и Боба записывается в рабочую копию с помеченными метками конфликта. Убираем метки конфликта, и дорабатываем код так, чтобы программа компилировалась и работала. Затем загружаем изменения в индекс и продолжаем операцию git rebase, с помощью флага –continue. rybin@Bomba MINGW64 ~/OneDrive/Desktop/bob/project (main|REBASE 1/1) $ git add main.cpp rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main|REBASE 1/1) $ git rebase --continue [detached HEAD 9dc1bfc] code: вывод минимума 1 file changed, 6 insertions(+) Successfully rebased and updated refs/heads/main. rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main) $ git log --oneline --decorate --all --graph * 9dc1bfc (HEAD -> main) code: вывод минимума * a262594 (origin/main, origin/HEAD) code: вывод максимума * a959899 code: вывод деления * b0667fd code: вывод произведения * 1dc38fd git: игнорирование бинарных файлов * 62b8365 code: вывод разности * 3b9353a code: вывод суммы * 9ca7d49 build: add project file * 9f4438c code: заготовка программы (Получили желаемый результат) Отправим изменения на сервер. rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/bob/project (main) $ git push Enter passphrase for key '/c/Users/Вантуз/.ssh/id_rsa': Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 12 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 438 bytes | 438.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:StepanovaKY/cs-lab02.git a262594..9dc1bfc main -> main В это время Алиса создаёт новую ветку (с помощью комманды git branch) для изменения типа переменных на вещественный. Начинает она с коммита, когда добавлена печать максимума. rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git branch double rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git checkout double Switched to branch 'double' rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (double) $ git add main.cpp rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (double) $ git commit -m 'code: изменение типа переменных' [double 04a65b4] code: изменение типа переменных 1 file changed, 1 insertion(+), 1 deletion(-) Затем переключается на ветку main. И синхронизирует её rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (double) $ git checkout main Switched to branch 'main' Your branch is up to date with 'origin/main'. rybin@Bomba MINGW64 ~/OneDrive/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), 418 bytes | 41.00 KiB/s, done. From uit.mpei.ru:StepanovaKY/cs-lab02 a262594..9dc1bfc main -> origin/main rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git log --oneline --decorate --all --graph * 04a65b4 (double) code: изменение типа переменных | * 9dc1bfc (origin/main) code: вывод минимума |/ * a262594 (HEAD -> main) code: вывод максимума * a959899 code: вывод деления * b0667fd code: вывод произведения * 1dc38fd git: игнорирование бинарных файлов * 62b8365 code: вывод разности * 3b9353a code: вывод суммы * 9ca7d49 build: add project file * 9f4438c code: заготовка программы (Получаем одновременно две ветки) Объединяем их с помощью комманды git merge. Вносим последние изменения и загружаем на GitHub. rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git merge double Auto-merging main.cpp Merge made by the 'ort' strategy. main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rybin@Bomba MINGW64 ~/OneDrive/Desktop/lab02/alice/project (main) $ git push Enumerating objects: 10, done. Counting objects: 100% (10/10), done. Delta compression using up to 12 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 831 bytes | 831.00 KiB/s, done. Total 6 (delta 2), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:StepanovaKY/cs-lab02.git 9dc1bfc..cfe757c main -> main