Создаем папку alice:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02
$ mkdir alice

Создаем папку bob:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02
$ mkdir bob

заходим в папку alice:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02
$ cd alice

Создаем папку project:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice
$ mkdir project

заходим в папку project:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice
$ cd project

выходим из данной папки:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project
$ cd ..

заходим в папку project:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice
$ cd project

Инициализируем репозитарий в текущем каталоге (project):

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project
$ git init
Initialized empty Git repository in C:/Users/Texas/Desktop/lab02/alice/project/.git/

Настроим репозитарий Алисы, чтобы коммиты были от ее имени:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (master)
$ git config user.name 'Alice (LevshenkoDI)'

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (master)
$ git config user.email 'aglowtexas38@gmail.com'

Запустим CodeBlocks и создадим проект в репозитарии Алисы

Вернувшись в Git Bash, просмотрим состояние рабочей копии:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (master)
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        bin/             создан codeblocks при сборке
        main.cpp         код программы
        obj/             создан codeblocks при сборке
        project.cbp      файл проекта

nothing added to commit but untracked files present (use "git add" to track)



Добавим файл main.cpp в индекс, то есть в набор изменений, который войдет в очередной коммит. Так как этот файл ранее не отслеживался Git, то говорят, что файл «заносят под Git» или «начинают отслеживать»

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (master)
$ git add main.cpp

Проверим теперь состояние рабочей копии:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (master)
$ git status
On branch master

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
        project.layout

Файл main.cpp теперь отслеживается гитом

Выполним коммит с файлом main.cpp и коротким сообщением:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (master)
$ git commit -m 'code: заготовка программы'
[master (root-commit) 7ef0d03] code: заготовка программы
 1 file changed, 9 insertions(+)
 create mode 100644 main.cpp


Добавим файл project.cbp в индекс и сделаем коммит с ним, тема — build

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (master)
$ git add project.cbp
warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (master)
$ git commit -m 'build: добавлен файл проекта'
[master 0b1b029] build: добавлен файл проекта
 1 file changed, 40 insertions(+)
 create mode 100644 project.cbp


Поменяем имя ветки на main командой:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (master)
$ git branch -m main

Заменим тело функции main() на ввод двух чисел

Просмотрим состояние репозитария:

Texas@DESKTOP-UH3DIP3 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

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")

Файл main.cpp теперь не новый, а измененный

3 способа создания коммита:

Способ 1. Сначала выбрать файлы, изменения которых должны войти в коммит, затем сделать коммит:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: ввод двух чисел'
[main 5bf9edf] code: ввод двух чисел
 1 file changed, 3 insertions(+), 1 deletion(-)

Добавим в программу вывод суммы a и b

Способ 2. Добавить в индекс все изменения, затем сделать коммит:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add -u

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: вывод суммы'
[main edb0229] code: вывод суммы
 1 file changed, 1 insertion(+)

Добавим в программу вывод разности a и b

Способ 3. Добавить все изменения в индекс и сделать коммит в один шаг:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -a -m 'code: Вывод разности'
[main 65528f7] code: Вывод разности
 1 file changed, 2 insertions(+), 1 deletion(-)

Укажем Git игнорировать присутствие каталога bin. Для этого создадим в CodeBlocks новый файл (File → New... → Empty) и запишем в него строку:

/bin
/obj

Texas@DESKTOP-UH3DIP3 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:   project.cbp

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        .gitignore
        project.depend

no changes added to commit (use "git add" and/or "git commit -a")

Выполнив git status, можно видеть, что каталог bin и obj не отображаются.

Создадим коммит с .gitignore, тема — git:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add .gitignore

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'git: Игнорирование файлов'
[main 7e60d56] git: Игнорирование файлов
 1 file changed, 2 insertions(+)
 create mode 100644 .gitignore

Журнал репозитория:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --stat
commit 7e60d5629fa4b2e1d1711de402485c6f8fc65f0e (HEAD -> main)
Author: Alice (LevshenkoDI) <aglowtexas38@gmail.com>
Date:   Sun Jun 4 11:11:05 2023 +0300

    git: Игнорирование файлов

 .gitignore | 2 ++
 1 file changed, 2 insertions(+)

commit 65528f7f42db18fda52af5f597e56f5d1d8fa08a
Author: Alice (LevshenkoDI) <aglowtexas38@gmail.com>
Date:   Sun Jun 4 10:59:31 2023 +0300

    code: Вывод разности

 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

commit edb022963a6ee245da95872e42c47d7afa73e682
Author: Alice (LevshenkoDI) <aglowtexas38@gmail.com>
Date:   Sun Jun 4 10:56:17 2023 +0300

    code: вывод суммы

У последнего коммита 1 файл был изменен и 2 файла было вставленно

Другие способы просмотра журнала:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate
7e60d56 (HEAD -> main) git: Игнорирование файлов
65528f7 code: Вывод разности
edb0229 code: вывод суммы
5bf9edf code: ввод двух чисел
0b1b029 build: добавлен файл проекта
7ef0d03 code: заготовка программы

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --oneline --decorate --all --graph
* 7e60d56 (HEAD -> main) git: Игнорирование файлов
* 65528f7 code: Вывод разности
* edb0229 code: вывод суммы
* 5bf9edf code: ввод двух чисел
* 0b1b029 build: добавлен файл проекта
* 7ef0d03 code: заготовка программы

Найдем коммиты по теме build, затем коммиты, затрагивающие project.cbp:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log --grep "build:"
commit 0b1b029d257541c706ab0b077511b2e52e4e9bf7
Author: Alice (LevshenkoDI) <aglowtexas38@gmail.com>
Date:   Sun Jun 4 10:41:22 2023 +0300

    build: добавлен файл проекта

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git log -- project.cbp
commit 0b1b029d257541c706ab0b077511b2e52e4e9bf7
Author: Alice (LevshenkoDI) <aglowtexas38@gmail.com>
Date:   Sun Jun 4 10:41:22 2023 +0300

    build: добавлен файл проекта

Просмотрим последний коммит тремя эквивалентными способами

1 способ:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show HEAD~1
commit 65528f7f42db18fda52af5f597e56f5d1d8fa08a
Author: Alice (LevshenkoDI) <aglowtexas38@gmail.com>
Date:   Sun Jun 4 10:59:31 2023 +0300

    code: Вывод разности

diff --git a/main.cpp b/main.cpp
index 6de6dd2..c4f6adb 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';
     return 0;
 }

2 способ:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show main HEAD~1
commit 7e60d5629fa4b2e1d1711de402485c6f8fc65f0e (HEAD -> main)
Author: Alice (LevshenkoDI) <aglowtexas38@gmail.com>
Date:   Sun Jun 4 11:11:05 2023 +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

commit 65528f7f42db18fda52af5f597e56f5d1d8fa08a
Author: Alice (LevshenkoDI) <aglowtexas38@gmail.com>
Date:   Sun Jun 4 10:59:31 2023 +0300

    code: Вывод разности

diff --git a/main.cpp b/main.cpp
index 6de6dd2..c4f6adb 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';
     return 0;
 }

3 способ:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git show 65528f7f42db18fda52af5f597e56f5d1d8fa08a
commit 65528f7f42db18fda52af5f597e56f5d1d8fa08a
Author: Alice (LevshenkoDI) <aglowtexas38@gmail.com>
Date:   Sun Jun 4 10:59:31 2023 +0300

    code: Вывод разности

diff --git a/main.cpp b/main.cpp
index 6de6dd2..c4f6adb 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';
     return 0;
 }

Добавим печать произведения чисел, но не станем пока делать коммит

Просмотрим изменения в рабочей копии:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ 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
index c4f6adb..7a59eaf 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;
 }
diff --git a/project.cbp b/project.cbp
index 99bb702..34f06bc 100644
--- a/project.cbp
+++ b/project.cbp
@@ -32,6 +32,7 @@
                        <Add option="-Wall" />
                        <Add option="-fexceptions" />
                </Compiler>
+               <Unit filename=".gitignore" />
                <Unit filename="main.cpp" />
                <Extensions>
                        <lib_finder disable_auto="1" />

Просмотрим изменения между самым первым коммитом и коммитом, добавляющим вывод разности:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git diff 7ef0d03 65528f7
diff --git a/main.cpp b/main.cpp
index b4392ec..c4f6adb 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,10 @@ using namespace std;

 int main()
 {
-    cout << "Hello world!" << endl;
+    cout << "Enter A and B: ";
+    int a, b;
+    cin >> a >> b;
+    cout << "A + B = " << a + b << '\n'
+     << "A - B = " << a - b << '\n';
     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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
+<CodeBlocks_project_file>
+       <FileVersion major="1" minor="6" />
+       <Project>
+               <Option title="project" />
+               <Option pch_mode="2" />
+               <Option compiler="gcc" />
+               <Build>
+                       <Target title="Debug">
+                               <Option output="bin/Debug/project" prefix_auto="1" extension_auto="1" />
+                               <Option object_output="obj/Debug/" />
+                               <Option type="1" />
+                               <Option compiler="gcc" />
+                               <Compiler>
+                                       <Add option="-g" />
+                               </Compiler>
+                       </Target>
+                       <Target title="Release">
+                               <Option output="bin/Release/project" prefix_auto="1" extension_auto="1" />
+                               <Option object_output="obj/Release/" />
+                               <Option type="1" />

Закоммитим изменения в рабочей копии (вывод произведения):

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: Вывод произведения'
[main 343d61b] code: Вывод произведения
 1 file changed, 2 insertions(+), 1 deletion(-)

Отправляем проект на сервер

Предположим, к разработке проекта присоединяется Боб

Открываем гит баш в каталоге bob и клонируем проект:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/bob
$ git clone git@uit.mpei.ru:Dmitriy_Levshenko/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), 2.37 KiB | 2.37 MiB/s, done.
Resolving deltas: 100% (2/2), done.

Переходим в каталог проекта у Боба:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/bob
$ cd project

У Алисы добавляем в программу печать деления

Делаем коммит:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git add main.cpp

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git commit -m 'code: Вывод деления'
[main 85264de] code: Вывод деления
 1 file changed, 2 insertions(+), 1 deletion(-)

Отправляем коммит на сервер:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/alice/project (main)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 20 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 411 bytes | 411.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:Dmitriy_Levshenko/cs-lab02.git
   343d61b..85264de  main -> main

У Боба принимаем коммит:

Texas@DESKTOP-UH3DIP3 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), 391 bytes | 35.00 KiB/s, done.
From uit.mpei.ru:Dmitriy_Levshenko/cs-lab02
   343d61b..85264de  main       -> origin/main

Убеждаемся, что в рабочей копии ветка main отстает от ветки origin/main на один коммит:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git log --oneline --decorate --all --graph
* 85264de (origin/main, origin/HEAD) code: Вывод деления
* 343d61b (HEAD -> main) code: Вывод произведения
* 7e60d56 git: Игнорирование файлов
* 65528f7 code: Вывод разности
* edb0229 code: вывод суммы
* 5bf9edf code: ввод двух чисел
* 0b1b029 build: добавлен файл проекта
* 7ef0d03 code: заготовка программы

Продвигаем ветку main к скачанной версии:

Texas@DESKTOP-UH3DIP3 MINGW64 ~/Desktop/lab02/bob/project (main)
$ git pull --ff-only
Updating 343d61b..85264de
Fast-forward
 main.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)