Создаем папку 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(-)