- Создайте пустой репозиторий на сервисе github.com (или gitlab.com, или bitbucket.com).
- Выполните инструкцию по созданию первого коммита на странице репозитория, созданного на предыдещем шаге.
$ mkdir lab02 && cd lab02
$ git init
$ git remote add origin https://github.com/Software9-1/lab02.git
$ git branch -M main
$ git push -u origin main
- Создайте файл
hello_world.cpp
в локальной копии репозитория (который должен был появиться на шаге 2). Реализуйте программу Hello world на языке C++ используя плохой стиль кода. Например, после заголовочных файлов вставьте строкуusing namespace std;
.
$ cat > hello_world.cpp << EOF
#include <iostream>
using namespace std;
int main() {
cout << "Hello, world!" << endl;
return 0;
}
EOF
- Добавьте этот файл в локальную копию репозитория.
$ git add hello_world.cpp
- Закоммитьте изменения с осмысленным сообщением.
$ git commit -m "add hello_world.cpp"
- Изменитьте исходный код так, чтобы программа через стандартный поток ввода запрашивалось имя пользователя. А в стандартный поток вывода печаталось сообщение
Hello world from @name
, где@name
имя пользователя.
$ vim hello_world.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
string name;
getline(cin, name);
cout << "Hello world from " << name << endl;
return 0;
}
- Закоммитьте новую версию программы.
$ git commit -m "add hello_world.cpp v2.0"
- Запуште изменения в удалёный репозиторий.
$ git push origin main
- Проверьте, что история коммитов доступна в удалёный репозитории.
Note: Работать продолжайте с теми же репоззиториями, что и в первой части задания.
- В локальной копии репозитория создайте локальную ветку
patch1
.
$ git checkout -b patch1
- Внесите изменения в ветке
patch1
по исправлению кода и избавления отusing namespace std;
.
$ vim hello_world.cpp
#include <iostream>
#include <string>
int main()
{
std::string name;
getline(std::cin, name);
std::cout << "Hello world from " << name << std::endl;
return 0;
}
- commit, push локальную ветку в удалённый репозиторий.
$ git add hello_world.cpp
$ git commit -m "removed using namespace std"
$ git push origin patch1
- Проверьте, что ветка
patch1
доступна в удалёный репозитории. - Создайте pull-request
patch1 -> master
. - В локальной копии в ветке
patch1
добавьте в исходный код комментарии.
$ vim hello_world.cpp
#include <iostream>
#include <string>
int main()
{
std::string name;
//name input
getline(std::cin, name);
//output
std::cout << "Hello world from " << name << std::endl;
return 0;
}
- commit, push.
$ git add hello_world.cpp
$ git commit -m "added comments"
$ git push origin patch1
- Проверьте, что новые изменения есть в созданном на шаге 5 pull-request
- В удалённый репозитории выполните слияние PR
patch1 -> master
и удалите веткуpatch1
в удаленном репозитории. - Локально выполните pull.
$ git checkout main
$ git pull origin main
- С помощью команды git log просмотрите историю в локальной версии ветки
master
.
$ git log
commit 431445c5f83513190d03b33f6d7300ccba4dc2d5 (HEAD -> main, origin/main)
Merge: b1081bd ce29bd4
Author: Software9-1 <[email protected]>
Date: Sun Apr 28 20:16:15 2024 +0300
Merge pull request #1 from Software9-1/patch1
removed using namespace std
commit ce29bd439af26679b3e005991c9fd345fb048749 (origin/patch1, patch1)
Author: Software9-1 <[email protected]>
Date: Sun Apr 28 20:14:45 2024 +0300
added comments
commit 22493674c359ae0403b9789f1391348fe9704752
Author: Software9-1 <[email protected]>
Date: Sun Apr 28 20:10:41 2024 +0300
removed using namespace std
commit b80e411212b5b4c784819b5fd7b4aa316a51482e
Author: Software9-1 <Software9-1m>
Date: Sun Apr 28 20:07:25 2024 +0300
removed using namespace std
commit b1081bdc847ad1f830995d413b00e6347ecdd770
Author: Software9-1 <[email protected]>
Date: Sun Apr 28 19:57:35 2024 +0300
add hello_world.cpp v2.0
commit eb3a8707d04669d78c930e46f1204f6035acce6e
Author: Software9-1 <[email protected]>
Date: Sun Apr 28 13:07:24 2024 +0300
add hello_world.cpp
- Удалите локальную ветку
patch1
.
$ git branch -D patch1
Deleted branch patch1 (was ce29bd4).
Note: Работать продолжайте с теми же репозиториями, что и в первой части задания.
- Создайте новую локальную ветку
patch2
.
$ git checkout -b patch2
- Измените code style с помощью утилиты clang-format. Например, используя опцию
-style=Mozilla
.
$ clang-format -style=Mozilla hello_world.cpp
$ vim hello_world.cpp
#include <iostream>
#include <string>
int
main()
{
std::string name;
// name input
getline(std::cin, name);
// output
std::cout << "Hello world from " << name << std::endl;
return 0;
}
- commit, push, создайте pull-request
patch2 -> master
.
$ git add hello_world.cpp
$ git commit -m "mozilla codestyle"
$ git push origin patch2
- В ветке master в удаленном репозитории измените комментарии, например, расставьте знаки препинания, переведите комментарии на другой язык.
$ vim hello_world.cpp
#include <iostream>
#include <string>
int main()
{
std::string name;
//ввод имени
getline(std::cin, name);
//вывод
std::cout << "Hello, world from " << name << std::endl;
return 0;
}
- Убедитесь, что в pull-request появились конфликтны.
- Для этого локально выполните pull + rebase (точную последовательность команд, следует узнать самостоятельно). Исправьте конфликты.
$ git pull origin main --rebase
From https://github.com/Software9-1/lab02
* branch main -> FETCH_HEAD
Auto-merging hello_world.cpp
CONFLICT (content): Merge conflict in hello_world.cpp
error: could not apply 220f553... mozilla codestyle
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".
Could not apply 220f553... mozilla codestyle
$ vim hello_world.cpp
$ git add .
$ git commit -m "final commit"
$ git rebase --continue
Successfully rebased and updated refs/heads/patch2.
- Сделайте force push в ветку
patch2
$ git push -f origin patch2
- Убедитель, что в pull-request пропали конфликтны.
- Вмержите pull-request
patch2 -> master
.
Copyright (c) 2015-2021 The ISC Authors