Скачиваний:
11
Добавлен:
25.03.2021
Размер:
265.77 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА по дисциплине «Разработка программного обеспечения систем управления»

тема: «Основы языка С++»

Задание

От лица двух участников создать совместный проект с помощью Github.

Логика решения

Создание проекта одним участником, копирование проекта другим участником, внесение изменений каждым из участников, совмещение измененных версий в общий проект.

Код

Создадим папку alice mkdir alice

Создадим папку bob mkdir bob

Перейдем в папку alice cd alice

В папке alice создадим папку project mkdir project

Перейдем в папку project cd project

Перейдем из папки project на уровень выше — в папку alice cd ..

Перейдем в папку project cd project

Инициализируем репозитарий в текущем каталоге git init

Настроим репозитарий Алисы, чтобы коммиты были от ее имени git config user.name 'Alice (имя)'

git config user.email 'почта'

Запускаем CodeBlocks и создаем проект в репозитарии Алисы, собираем его. Просмотрим состояние рабочей копии

git status

Вывод:

On branch master //на ветке master No commits yet //нет коммитов

Untracked files: //неотслеживаемые файлы:

(use "git add ..." to include in what will be committed) //(используйте “git add”, чтобы включить то, что будет закоммичено)

bin/ //неотслеживаемый файл

main.cpp //неотслеживаемый файл obj/ //неотслеживаемый файл project.cbp //неотслеживаемый файл

nothing added to commit but untracked files present (use "git add" to track) //ничего не добавлено, чтобы коммитить, присутствуют неотслеживаемые файлы (используйте "git add", чтобы отслеживать их)

Добавим файл main.cpp в отслеживаемые (в индекс): git add main.cpp

Просмотрим состояние рабочей копии git status

Вывод:

On branch master //на ветке master No commits yet //нет коммитов

Changes to be committed: //изменения, которые должны быть закоммичены

(use "git rm –cached ..."

to unstage) //(используйте “git rm -cached ...”, чтобы убрать из индекса)

new file:

main.cpp //новый файл: main.cpp

Untracked files: //неотслеживаемые файлы:

(use "git add ..." to include in what will be committed) //(используйте “git add”, чтобы включить то, что будет закоммичено)

bin/ //неотслеживаемый файл obj/ //неотслеживаемый файл

project.cbp //неотслеживаемый файл

Выполним коммит с файлом main.cpp и коротким сообщением: git commit -m 'code: заготовка программы'

Добавим файл project.cbp в отслеживаемые (в индекс): git add project.cbp

Выполним коммит с файлом main.cpp и темой build: git commit -m 'build'

Заменим тело функции main() на ввод двух чисел: cout << "Enter A and B: ";

int a, b;

cin >> a >> b;

Просмотрим состояние рабочей копии git status

Вывод:

On branch master //на ветке master

Changes not staged for commit: //изменения не в индексе коммита

(use “git add …” to update what will be committed) //используйте git add, чтобы добавить то, что будет закоммичено

2

(use "git checkout ..." to discard changes in working directory) //(используйте git checkout, чтобы отменить изменения в рабочем каталоге)

modified:

main.cpp //изменен main.cpp

Untracked files:

//неотслеживаемые файлы:

(use "git add ..." to include in what will be committed) //(используйте “git add”, чтобы включить то, что будет закоммичено)

bin/

obj/

nothing added to commit //ничего не добавлено, чтобы коммитить

(use "git add" and/or "git commit -a") //(используйтесь “git add” и/или “git commit -a”)

Выберем файл, изменение которого должно войти в коммит git add main.cpp

Сделаем коммит

git commit -m "Ввод двух чисел"

Втело функции main() добавим cout << "A + B = " << a + b << '\n';

Добавим в индекс все изменения git add -u

Сделаем коммит

git commit -m "Вывод суммы"

Изменим тело функции main(), добавим << "A - B = " << a - b << '\n';

Добавим все изменения в индекс и сделаем коммит в один шаг git commit -a -m "Вывод суммы и разности"

Создадим в CodeBlocks новый файл и запишем в него строку: /bin Сохраним файл в корне репозитарий под именем .gitignore Просмотрим состояние рабочей копии

git status

Каталог bin не отображается

Вфайл, где записан /bin, на следующей строчке запишем /obj Сохраним изменения Просмотрим состояние рабочей копии

git status

Каталог obj не отображается

Выберем файл, изменение которого должно войти в коммит git add .gitignore

Сделаем коммит с темой git git commit -m "git"

Просмотрим журнал репозитария git log –stat

3

Вывод для последнего коммита: commit хэш //хэш коммита

Author: Alice (имя) <почта > //автор коммита

Date: дата //время, когда сделан коммит git

.gitignore | 4 ++++ //4 вставки

1 file changed, 4 insertions(+) //1 файл изменен, 4 вставки

Просмотрим коммиты (компактно) git log --oneline --decorate

Просмотрим коммиты (компактно) для всех веток git log --oneline --decorate --all --graph

Найдем коммиты по теме build git log --grep "build"

Найдем коммиты, затрагивающие project.cbp git log -- project.cbp

Просмотрим предпоследний коммит 1 способом git show HEAD~1

Вывод:

commit хэш //хэш коммита

Author: Alice (имя) <почта > //автор коммита

Date: дата //время, когда сделан коммит

Вывод суммы и разности //комментарий к коммиту

diff --git a/main.cpp b/main.cpp //просмотр различий между версиями index индекс //индекс

--- 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'; //добавленная строка

} //контекст

Просмотрим предпоследний коммит 2 способом git show master HEAD~1

Просмотрим предпоследний коммит 3 способом git show нужный_хэш

4

Внесем изменения в main.cpp: добавим << "A * B = " << a * b << '\n';

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

Вывод:

diff --git a/main.cpp b/main.cpp //просмотр различий между версиями index индекс //индекс

--- a/main.cpp //заголовок

+++ b/main.cpp //заголовок

@@ -8,5 +8,6 @@ cout << "Enter A and B: "; //обозначение места изменений в файле, измененная функция 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';

//добавленная строка

} //контекст

 

Просмотрим изменения между самым первым коммитом и коммитом, добавляющим вывод разности git diff HEAD~5 HEAD~1

Выберем файл, изменение которого должно войти в коммит git add main.cpp

Сделаем коммит с темой git

git commit -m "Вывод произведения" Отменим последний коммит

git reset --hard HEAD~1

Добавим над функцией main() комментарий: // you may type whatever you want

Уберем изменения в main.cpp, откатив этот файл к состоянию в последнем коммите (HEAD): git checkout HEAD -- main.cpp

Передадим на Github

git remote add origin https://github.com/имя /LR2.git git push -u origin master

Отобразим адрес, который использовался в команде git remote add git remote -v

Откроем новый терминал Git Bash в каталоге bob. Клонируем проект git clone https://github.com/имя /LR2.git project

Перейдем в каталог проекта «на машине Боба» cd project

Инициализируем репозитарий в текущем каталоге git init

Настроим репозитарий Боба, чтобы коммиты были от его имени git config user.name 'Bob (имя)'

5

git config user.email 'почта'

«На машине Боба» добавим в программу печать произведения чисел Выберем файл, изменение которого должно войти в коммит

git add main.cpp

Сделаем коммит

git commit -m "Вывод произведения" Просмотрим последний коммит

git show HEAD

Отправим коммит на GitHub git push

«На машине Алисы» выполним загрузку изменений git fetch

Просмотрим историю всех веток git log --oneline --decorate --all --graph

Продвинем ветку master к скачанной версии git pull --ff-only

«От имени Алисы» добавим в программу печать деления Выберем файл, изменение которого должно войти в коммит git add main.cpp

Сделаем коммит

git commit -m "Вывод деления"

Просмотрим последний коммит git show HEAD

Отправим коммит на GitHub git push

«На машине Боба» выполним загрузку изменений git fetch

Просмотрим историю всех веток git log --oneline --decorate --all --graph

Продвинем ветку master к скачанной версии git pull --ff-only

«На машине Алисы» дополним программу печатью максимума Выберем файл, изменение которого должно войти в коммит git add main.cpp

Сделаем коммит

git commit -m "Вывод максимума" Просмотрим последний коммит git show HEAD

Отправим коммит на GitHub git push

«На машине Боба» дополним программу печатью минимума Выберем файл, изменение которого должно войти в коммит

6

git add main.cpp

Сделаем коммит

git commit -m "Вывод минимума"

Просмотрим последний коммит git show HEAD

Попытаемся отправить коммит на GitHub git push

Удаленный репозитарий не принимает изменений: коммит Боба основан не на последнем существующем коммите «На машине Боба» выполним загрузку изменений

git fetch

Просмотрим историю всех веток git log --oneline --decorate --all –graph

Вывод:

* 726a721 (HEAD, master) Вывод минимума

| * 7c1af90 (origin/master, origin/HEAD) Вывод максимума |/

*f8a5119 Вывод деления

*1d2818a Вывод произведения

*9474702 git

*7a9e6b4 Вывод суммы и разности

*2d54d98 Вывод суммы

*2b37afa Ввод двух чисел

*6fdd2bc build

*c50575d code: заготовка программы

Переместим коммит Боба поверх коммита Алисы, то есть поверх origin/master git rebase origin/master

«На машине Боба» в CodeBlocks место конфликта будет отмечено прямо в коде:

<<<<<<< HEAD

if (a > b) cout << "max = " << a << '\n'; else cout << "max = " << b << '\n';

=======

if (a > b) cout << "min = " << b << '\n'; else cout << "min = " << a << '\n';

>>>>>>> Вывод минимума

Удалим метки конфликта: <<<< ..., ... >>>> и =====

Добавим файл в индекс git add main.cpp

Продолжим прерванную операцию rebase

7

git rebase –continue

Вид хранилища:

#include <iostream>

using namespace std;

int main()

{

cout << "Enter A and B: "; 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';

if (a > b) cout << "max = " << a << '\n'; else cout << "max = " << b << '\n';

if (a > b) cout << "min = " << b << '\n'; else cout << "min = " << a << '\n';

}

Отправим изменения на GitHub git push

“На машине Алисы cоздадим ветку double git branch double

Переключимся на нее git checkout double

Заменим тип переменных a и b на double

Выберем файл, изменение которого должно войти в коммит git add main.cpp

Сделаем коммит

git commit -m "новый тип"

Переключимся на ветку master git checkout master

«На машинеAlice» выполним загрузку изменений git fetch

Продвинем ветку master к скачанной версии git pull --ff-only

Просмотрим историю всех веток git log --oneline --decorate --all –graph

8

Вывод:

* bc81c6e (double) новый тип

| * 868be19 (HEAD, origin/master, master) Вывод минимума |/

*7c1af90 Вывод максимума

*f8a5119 Вывод деления

*1d2818a Вывод произведения

*9474702 git

*7a9e6b4 Вывод суммы и разности

*2d54d98 Вывод суммы

*2b37afa Ввод двух чисел

*6fdd2bc build

*c50575d code: заготовка программы

Сольем ветку double в master git merge double

В результате слияния образуется специальный новый коммит (merge commit), к которому Git предлагает написать сообщение в редакторе Просмотрим историю всех веток

git log --oneline --decorate --all –graph

Вывод:

* bc81c6e (double) новый тип

| * 868be19 (HEAD, origin/master, master) Вывод минимума |/

*7c1af90 Вывод максимума

*f8a5119 Вывод деления

*1d2818a Вывод произведения

*9474702 git

*7a9e6b4 Вывод суммы и разности

*2d54d98 Вывод суммы

*2b37afa Ввод двух чисел

*6fdd2bc build

*c50575d code: заготовка программы

9

Соседние файлы в папке Лабораторные работы 2 семестр