Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

824 строки
34 KiB
Plaintext

Отчет по лабораторной работе № 2 "Система контроля версий Git"
Выполнил: Андросов Д. С.
Группа: А-03-24
Проверил: Козлюк Д. А.
Примечание: работа выполнялась на Windows.
1. Создал на рабочем столе каталог lab02 и запустил в нем Git Bash, приглашение:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02
$
2. Просмотрел файлы в рабочем каталоге можно командой "ls" --- пусто:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02
$ ls
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02
$
3. Создал каталоги Алисы и Боба, создал каталог "project",
изучил команду "cd" в процессе:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02
$ mkdir alice
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02
$ mkdir bob
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02
$ cd bob
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob
$ cd ..
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02
$ cd alice
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice
$ mkdir project
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice
$ ls
project/
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice
$ cd project
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project
$
4. Инициализировал репозитарий:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project
$ git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in C:/Users/Diman3000/Desktop/lab02/alice/project/.git/
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (master)
$
Поменяем имя ветки на main:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (master)
$ git branch -m main
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ ls -A
.git/
Настроим репозитарий Алисы, чтобы коммиты были от ее имени:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git config user.name 'Alice (AndrosovDS)'
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git config user.email 'AndrosovDS@mpei.ru'
5. Создание коммитов:
Запустиv CodeBlocks и создадим проект в репозитарии Алисы
Имеем следующую структуру файлов и каталогов:
lab02
├── alice
│ └── project <--------- текущий рабочий каталог
│ ├── .git <--------- создан командой "git init"
│ ├── bin <--------- создан CodeBlocks при сборке
│ ├── obj <--------- (то же самое)
│ ├── main.cpp <-- код программы
│ └── project.cbp <-- файл проекта
└── bob
Вернувшись в Git Bash, просмотрим состояние рабочей копии:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main <-- находимся на ветке main
No commits yet <-- сообщение, что нет ни одного коммита
Untracked files: <-- git обнаружил файлы в рабочем каталоге, но он их не отслеживает
(use "git add <file>..." 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) <-- Подтверждает, что ничего не было добавлено в область подготовленных файлов, но есть не отслеживаемые файлы.
Добавим файл main.cpp в индекс:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
Посмотрим изменения:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
No commits yet
Changes to be committed: <--Он показывает файлы, которые находятся в области подготовленных файлов и будут включены в следующий коммит.
(use "git rm --cached <file>..." to unstage)
new file: main.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
project.cbp
Выполним коммит с файлом main.cpp и коротким сообщением:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: заготовка программы'
[main (root-commit) eb352f8] code: заготовка программы
1 file changed, 9 insertions(+)
create mode 100644 main.cpp
Добавим файл project.cbp в индекс и сделаем коммит с ним, тема — build.
Diman3000@DESKTOP-5UPO29D 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
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'build: add project file'
[main 95259f2] build: add project file
1 file changed, 40 insertions(+)
create mode 100644 project.cbp
Заменим тело функции main() на ввод двух чисел и посмотрим состояние репозитария:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: main.cpp <-- Указывает, что файл main.cpp был изменен, но эти изменения еще не в области подготовленных файлов.
Untracked files:
(use "git add <file>..." to include in what will be committed)
bin/
obj/
no changes added to commit (use "git add" and/or "git commit -a")
1 способ коммита. Сначала выбрать файлы, изменения которых должны войти в коммит, затем сделать коммит:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m "code: ввод двух чисел"
[main 9b3e59b] code: ввод двух чисел
1 file changed, 3 insertions(+), 2 deletions(-)
Добавил в программу вывод суммы a и b.
2 способ коммита. Добавить в индекс все изменения, затем сделать коммит:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add -u
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m "code: вывод суммы двух чисел"
[main 579e11b] code: вывод суммы двух чисел
1 file changed, 1 insertion(+)
Добавил в программу вывод разности a и b.
3 способ коммита. Добавить все изменения в индекс и сделать коммит в один шаг:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -a -m "code: вывод разности двух чисел"
[main 0ccb145] code: вывод разности двух чисел
1 file changed, 2 insertions(+), 1 deletion(-)
6. Игнорирование файлов:
Укажем Git игнорировать присутствие каталога bin. Для этого создадим в CodeBlocks новый файл (File → New... → Empty) и запишем в него строку:
/bin
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
obj/
project.layout
nothing added to commit but untracked files present (use "git add" to track)
bin не отображается
Занесем в список игнорируемых каталоги bin и obj и файлы *.layout.
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
Создадим коммит с .gitignore, тема — git
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add .gitignore
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -a -m "git: игнорирование bin obj .layout"
[main 0d5ee38] git: игнорирование bin obj .layout
1 file changed, 3 insertions(+)
create mode 100644 .gitignore
7. Просмотр истории:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log
commit 0d5ee3840cf42d4bb597d7ff858272ca307600bd (HEAD -> main)
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 16 12:26:46 2025 +0300
git: игнорирование bin obj .layout
commit 0ccb145dc7129139b4ddabaefcd9a09a88a741c1
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 16 12:18:34 2025 +0300
code: вывод разности двух чисел
commit 579e11ba75a40370ec6d4f51e08df2f21f7952f3
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 16 12:17:08 2025 +0300
code: вывод суммы двух чисел
commit 9b3e59be040524543ff7286b78562e7683db9302
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 16 12:15:21 2025 +0300
code: ввод двух чисел
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --stat
commit 0d5ee3840cf42d4bb597d7ff858272ca307600bd (HEAD -> main) --- коммит, хэш коммита, ветка HEAD указывает на ветку main
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru> --- Автор
Date: Sun Mar 16 12:26:46 2025 +0300 --- Дата
git: игнорирование bin obj .layout --- Сообщение коммита
.gitignore | 3 +++ --- изменен gitignore, добавлено 3 строки
1 file changed, 3 insertions(+) --- изменен 1 файл, добавлено 3 строки
commit 0ccb145dc7129139b4ddabaefcd9a09a88a741c1
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 16 12:18:34 2025 +0300
code: вывод разности двух чисел
main.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
commit 579e11ba75a40370ec6d4f51e08df2f21f7952f3
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 16 12:17:08 2025 +0300
code: вывод суммы двух чисел
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate
0d5ee38 (HEAD -> main) git: игнорирование bin obj .layout
0ccb145 code: вывод разности двух чисел
579e11b code: вывод суммы двух чисел
9b3e59b code: ввод двух чисел
95259f2 build: add project file
eb352f8 code: заготовка программы
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate --all --graph
* 0d5ee38 (HEAD -> main) git: игнорирование bin obj .layout
* 0ccb145 code: вывод разности двух чисел
* 579e11b code: вывод суммы двух чисел
* 9b3e59b code: ввод двух чисел
* 95259f2 build: add project file
* eb352f8 code: заготовка программы
Коммиты по теме build
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$git log --grep "build:"
commit 95259f299a9be05e4ac3416bc06881b075bc6147
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 9 14:56:55 2025 +0300
build: add project file
Коммиты, затрагивающие project.cbp
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log -- project.cbp
commit 95259f299a9be05e4ac3416bc06881b075bc6147
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 9 14:56:55 2025 +0300
build: add project file
Посмотрим коммит тремя способами.
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show HEAD
commit 0d5ee3840cf42d4bb597d7ff858272ca307600bd (HEAD -> main)
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 16 12:26:46 2025 +0300
git: игнорирование bin obj .layout
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d85abef
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/bin
+/obj
+/*.layout
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show main
commit 0d5ee3840cf42d4bb597d7ff858272ca307600bd (HEAD -> main)
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 16 12:26:46 2025 +0300
git: игнорирование bin obj .layout
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d85abef
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/bin
+/obj
+/*.layout
Посмотрим предпоследний коммит
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show 0d5ee3840cf42d4bb597d7ff858272ca307600bd~1
commit 0ccb145dc7129139b4ddabaefcd9a09a88a741c1
Author: Alice (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 16 12:18:34 2025 +0300
code: вывод разности двух чисел
diff --git a/main.cpp b/main.cpp
index 4364dbc..fd75bba 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,5 +7,6 @@ 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';
}
Внесем изменения в main.cpp: добавим печать произведения чисел, но не станем пока делать коммит.
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git diff
diff --git a/main.cpp b/main.cpp ->будет показана разница между двумя версиями файла main.cpp
index fd75bba..91f8982 100644
--- a/main.cpp ->следующие строки относятся к старой версии файла main.cpp. Строки, начинающиеся с ---, берутся из версии “a”, то есть из зафиксированной версии.
+++ b/main.cpp -> следующие строки относятся к новой версии файла main.cpp. Строки, начинающиеся с +++, берутся из версии “b”, то есть из текущей рабочей копии.
@@ -8,5 +8,6 @@ int main()
cout << "Enter A and B: ";
int a, b;
cout << "A + B = " << a + b << '\n'
- << "A - B = " << a - b << '\n';
+ << "A - B = " << a - b << '\n'
+ << "A * B = " << a * b << '\n'; -> Строка, начинающаяся с +: Это добавленная строка в новой версии файла main.cpp. Добавлена строка, которая выводит результат умножения A * B.
}
Просмотрим изменения между самым первым коммитом и коммитом, добавляющим вывод разности.
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git diff HEAD~3 HEAD~1
diff --git a/main.cpp b/main.cpp
index eac5055..fd75bba 100644
--- a/main.cpp
+++ b/main.cpp
@@ -7,4 +7,6 @@ int main()
cout << "Enter A and B: ";
int a, b;
cin >> a >> b;
+ cout << "A + B = " << a + b << '\n'
+ << "A - B = " << a - b << '\n';
}
Коммит произведения
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -a -m "code: Вывод произведения двух чисел"
[main aa40eec] code: Вывод произведения двух чисел
1 file changed, 2 insertions(+), 1 deletion(-)
8. Откат изменений:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git reset --hard HEAD~1
HEAD is now at 0d5ee38 git: игнорирование bin obj .layout
Добавим над функцией main() комментарий:
// you may type whatever you want
Уберем изменения в main.cpp другим способом — откатив этот файл к состоянию в последнем коммите (HEAD)
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git checkout HEAD -- main.cpp
9. Обмен кодом через удаленное хранилище
Зарегистрировался на Git УИТ
Создал пару ключей
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ ssh-keygen
Generating public/private ed25519 key pair.
...
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ eval $(ssh-agent -s)
Agent pid 2025
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ ssh-add
Enter passphrase for /c/Users/Diman3000/.ssh/id_ed25519:
Identity added: /c/Users/Diman3000/.ssh/id_ed25519 (Diman3000@DESKTOP-5UPO29D)
Открытый ключ:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDvMW7I5s1bRAVK0UBHjeQ11RESmyBGs7GQIUCBfegT5 Diman3000@DESKTOP-5UPO29D
Скопировал открытый ключ и добавил в список открытых ключей своей учетной записи
Создал репозитарий под названием cs-lab02
Соединение с сервером(Через http, работа выполнялась из дома, VPN МЭИ настроить не получилось)
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git remote set-url origin http://uit.mpei.ru/git/AndrosovDS/cs-lab02.git
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push -u origin main
warning: use of unencrypted HTTP remote URLs is not recommended; see https://aka.ms/gcm/unsaferemotes for more information.
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.30 KiB | 393.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 http://uit.mpei.ru/git/AndrosovDS/cs-lab02.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
Получение проекта с сервера
Клонирование проекта:
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob
$ git clone http://uit.mpei.ru/git/AndrosovDS/cs-lab02.git project
Cloning into 'project'...
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.
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob
$ cd project
"На машине Боба" настроил Git, как это делалось для Алисы
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main)
$ git config user.name 'Bob (AndrosovDS)'
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main)
$ git config user.email 'AndrosovDS@mpei.ru'
«На машине Боба» добавил в программу печать произведения чисел и сделал коммит. Просмотрел последний коммит и убедился, что он сделан от имени Боба.
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main)
$ git commit -a -m "code: печать произведения двух чисел"
[main df8b691] code: печать произведения двух чисел
1 file changed, 2 insertions(+), 1 deletion(-)
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main)
$ git log
commit df8b691468f90eaa330fedeaf1176ff45f53fc00 (HEAD -> main)
Author: Bob (AndrosovDS) <AndrosovDS@mpei.ru>
Date: Sun Mar 16 14:03:09 2025 +0300
code: печать произведения двух чисел
Отправил коммит на сервер
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/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), 432 bytes | 432.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 http://uit.mpei.ru/git/AndrosovDS/cs-lab02.git
0d5ee38..df8b691 main -> main
«На машине Алисы» выполнил загрузку изменений
Diman3000@DESKTOP-5UPO29D 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), 412 bytes | 82.00 KiB/s, done.
From http://uit.mpei.ru/git/AndrosovDS/cs-lab02
0d5ee38..df8b691 main -> origin/main
Просмотрел историю всех веток
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate --all --graph
* df8b691 (origin/main, origin/HEAD) code: печать произведения двух чисел
* 0d5ee38 (HEAD -> main) git: игнорирование bin obj .layout
* 0ccb145 code: вывод разности двух чисел
* 579e11b code: вывод суммы двух чисел
* 9b3e59b code: ввод двух чисел
* 95259f2 build: add project file
* eb352f8 code: заготовка программы
Продвинул ветку main к скачанной версии
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git pull --ff-only
Updating 0d5ee38..df8b691
Fast-forward
main.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
«От имени Алисы» добавил в программу печать деления, сделал коммит, отправил его на сервер и получил новую версию «на машине Боба». Иначе говоря, повторил шаги выше, поменяв местами роли Алисы и Боба.
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -a -m "code: деление двух чисел"
warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it
[main 9d73a40] code: деление двух чисел
2 files changed, 3 insertions(+), 1 deletion(-)
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 16 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 468 bytes | 468.00 KiB/s, done.
Total 4 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: . Processing 1 references
remote: Processed 1 references in total
To http://uit.mpei.ru/git/AndrosovDS/cs-lab02.git
df8b691..9d73a40 main -> main
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main)
$ git pull
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 448 bytes | 11.00 KiB/s, done.
From http://uit.mpei.ru/git/AndrosovDS/cs-lab02
df8b691..9d73a40 main -> origin/main
Updating df8b691..9d73a40
Fast-forward
main.cpp | 3 ++-
project.cbp | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
10. Разрешение конфликтов правок при совместной работе
«На машине Алисы» дополнил программу печатью максимума, сделал коммит и отправил его на сервер.
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -a -m "code: Печать максимума"
[main 4be5e65] code: Печать максимума
1 file changed, 2 insertions(+), 1 deletion(-)
Diman3000@DESKTOP-5UPO29D 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 | 417.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 http://uit.mpei.ru/git/AndrosovDS/cs-lab02.git
9d73a40..4be5e65 main -> main
«На машине Боба» дополнил программу печатью минимума, сделал коммит и попытался отправить его на сервер.
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main)
$ git commit -a -m "code: Печать минимума"
[main 81a9926] code: Печать минимума
1 file changed, 2 insertions(+), 1 deletion(-)
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main)
$ git push
To http://uit.mpei.ru/git/AndrosovDS/cs-lab02.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'http://uit.mpei.ru/git/AndrosovDS/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.
Как можно видеть, удаленный репозитарий не принимает изменений: коммит Боба основан не на последнем существующем коммите.
«От лица Боба» загрузил коммиты из удаленного хранилища и отобразил историю всех веток
Diman3000@DESKTOP-5UPO29D 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), 397 bytes | 12.00 KiB/s, done.
From http://uit.mpei.ru/git/AndrosovDS/cs-lab02
9d73a40..4be5e65 main -> origin/main
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main)
$ git log --oneline --decorate --all --graph
* 81a9926 (HEAD -> main) code: Печать минимума
| * 4be5e65 (origin/main, origin/HEAD) code: Печать максимума
|/
* 9d73a40 code: деление двух чисел
* df8b691 code: печать произведения двух чисел
* 0d5ee38 git: игнорирование bin obj .layout
* 0ccb145 code: вывод разности двух чисел
* 579e11b code: вывод суммы двух чисел
* 9b3e59b code: ввод двух чисел
* 95259f2 build: add project file
* eb352f8 code: заготовка программы
Нужно поместить коммит Боба, поверх коммита Алисы
Diman3000@DESKTOP-5UPO29D 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 81a9926... code: Печать минимума
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", 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 81a9926... code: Печать минимума
Однако эта команда завершается с ошибкой, сообщающей о конфликте в main.cpp
Посмотрим состояние хранилища
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/project (main|REBASE 1/1)
$ git status
interactive rebase in progress; onto 4be5e65 -в данный момент выполняется rebase
Last command done (1 command done):
pick 81a9926 code: Печать минимума
No commands remaining.
You are currently rebasing branch 'main' on '4be5e65'.
(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 <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: main.cpp
Untracked files:
(use "git add <file>..." to include in what will be committed)
project.depend
no changes added to commit (use "git add" and/or "git commit -a")
git status говорит нам, что мы находимся в середине rebase, возник конфликт в main.cpp
Удалил метки конфликта, отредактировал код(включает правки Алисы и Боба), программа компилируется и работает
Добавил файл в индекс и продолжил прерванную операцию rebase
[detached HEAD 1cc8709] code: Печать минимума
1 file changed, 2 insertions(+), 1 deletion(-)
Successfully rebased and updated refs/heads/main.
Diman3000@DESKTOP-5UPO29D 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 <file>..." to include in what will be committed)
project.depend
nothing added to commit but untracked files present (use "git add" to track)
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/bob/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), 422 bytes | 422.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 http://uit.mpei.ru/git/AndrosovDS/cs-lab02.git
4be5e65..1cc8709 main -> main
11. Использование веток
Создал ветку и переключился на нее
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git branch double
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git checkout double
Switched to branch 'double'
В коде заменил тип переменных a и b на double и сделал коммит
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (double)
$ git commit -a -m "code: переменные типа double"
[double 912a770] code: переменные типа double
1 file changed, 1 insertion(+), 1 deletion(-)
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --graph --decorate --oneline --all
* 912a770 (double) code: переменные типа double
| * 1cc8709 (HEAD -> main, origin/main, origin/HEAD) code: Печать минимума
|/
* 4be5e65 code: Печать максимума
* 9d73a40 code: деление двух чисел
* df8b691 code: печать произведения двух чисел
* 0d5ee38 git: игнорирование bin obj .layout
* 0ccb145 code: вывод разности двух чисел
* 579e11b code: вывод суммы двух чисел
* 9b3e59b code: ввод двух чисел
* 95259f2 build: add project file
* eb352f8 code: заготовка программы
Слил ветку double в main
Auto-merging main.cpp
Merge made by the 'ort' strategy.
main.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
История всех веток
Diman3000@DESKTOP-5UPO29D MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --graph --decorate --oneline --all
* afabfb9 (HEAD -> main, origin/main, origin/HEAD) Merge branch 'double'
|\
| * 912a770 (double) code: переменные типа double
* | 1cc8709 code: Печать минимума
|/
* 4be5e65 code: Печать максимума
* 9d73a40 code: деление двух чисел
* df8b691 code: печать произведения двух чисел
* 0d5ee38 git: игнорирование bin obj .layout
* 0ccb145 code: вывод разности двух чисел
* 579e11b code: вывод суммы двух чисел
* 9b3e59b code: ввод двух чисел
* 95259f2 build: add project file
* eb352f8 code: заготовка программы