Skip to content

Latest commit

 

History

History
301 lines (232 loc) · 8.33 KB

README.md

File metadata and controls

301 lines (232 loc) · 8.33 KB

Homework

Part I

  1. Создайте пустой репозиторий на сервисе github.com (или gitlab.com, или bitbucket.com).
  2. Выполните инструкцию по созданию первого коммита на странице репозитория, созданного на предыдещем шаге.
$ 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
  1. Создайте файл 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
  1. Добавьте этот файл в локальную копию репозитория.
$ git add hello_world.cpp
  1. Закоммитьте изменения с осмысленным сообщением.
$ git commit -m "add hello_world.cpp"
  1. Изменитьте исходный код так, чтобы программа через стандартный поток ввода запрашивалось имя пользователя. А в стандартный поток вывода печаталось сообщение 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;
}
  1. Закоммитьте новую версию программы.
$ git commit -m "add hello_world.cpp v2.0"
  1. Запуште изменения в удалёный репозиторий.
$ git push origin main
  1. Проверьте, что история коммитов доступна в удалёный репозитории.

Part II

Note: Работать продолжайте с теми же репоззиториями, что и в первой части задания.

  1. В локальной копии репозитория создайте локальную ветку patch1.
$ git checkout -b patch1
  1. Внесите изменения в ветке 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;
}
  1. commit, push локальную ветку в удалённый репозиторий.
$ git add hello_world.cpp
$ git commit -m "removed using namespace std"
$ git push origin patch1
  1. Проверьте, что ветка patch1 доступна в удалёный репозитории.
  2. Создайте pull-request patch1 -> master.
  3. В локальной копии в ветке 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;
}
  1. commit, push.
$ git add hello_world.cpp
$ git commit -m "added comments"
$ git push origin patch1
  1. Проверьте, что новые изменения есть в созданном на шаге 5 pull-request
  2. В удалённый репозитории выполните слияние PR patch1 -> master и удалите ветку patch1 в удаленном репозитории.
  3. Локально выполните pull.
$ git checkout main
$ git pull origin main
  1. С помощью команды 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
  1. Удалите локальную ветку patch1.
$ git branch -D patch1
Deleted branch patch1 (was ce29bd4).

Part III

Note: Работать продолжайте с теми же репозиториями, что и в первой части задания.

  1. Создайте новую локальную ветку patch2.
$ git checkout -b patch2
  1. Измените 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;
}
  1. commit, push, создайте pull-request patch2 -> master.
$ git add hello_world.cpp
$ git commit -m "mozilla codestyle"
$ git push origin patch2
  1. В ветке 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;
}
  1. Убедитесь, что в pull-request появились конфликтны.
  2. Для этого локально выполните 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.
  1. Сделайте force push в ветку patch2
$ git push -f origin patch2
  1. Убедитель, что в pull-request пропали конфликтны.
  2. Вмержите pull-request patch2 -> master.
Copyright (c) 2015-2021 The ISC Authors