Данная лабораторная работа посвещена изучению систем контроля версий на примере Git.
$ open https://git-scm.com- 1. Создать публичный репозиторий с названием lab02 и с лиценцией MIT
- 2. Сгенирировать токен для доступа к сервису GitHub с правами repo
- 3. Ознакомиться со ссылками учебного материала
- 4. Выполнить инструкцию учебного материала
- 5. Составить отчет и отправить ссылку личным сообщением в Slack
#Создание наших переменных для гита
$ export GITHUB_USERNAME=<имя_пользователя>
$ export GITHUB_EMAIL=<адрес_почтового_ящика>
$ export GITHUB_TOKEN=<сгенирированный_токен>
#Выбор редактора текста (в моем случае это нано)
$ alias edit=<nano|vi|vim|subl>#Переход в папку workspace
$ cd ${GITHUB_USERNAME}/workspace
#Активация скриптов
$ source scripts/activate#Создание папки
$ mkdir ~/.config
#Записываем информацию в файл (с помощью cat)
$ cat > ~/.config/hub <<EOF
github.com:
- user: ${GITHUB_USERNAME}
oauth_token: ${GITHUB_TOKEN}
protocol: https
EOF
#Настроеваем протокол для гита
$ git config --global hub.protocol https#Создаем и автоматически переходим в папку
$ mkdir projects/lab02 && cd projects/lab02
#Создаем пустой репозиторий
$ git init
#Настраеваем гит( а именно вводим имя пользователя и пароль)
$ git config --global user.name ${GITHUB_USERNAME}
$ git config --global user.email ${GITHUB_EMAIL}
# check your git global settings
$ git config -e --global
#Подключение к удаленному репозиторию
$ git remote add origin https://github.com/${GITHUB_USERNAME}/lab02.git
#Добавляем ветку мастер (в иных случаях функция обновляет ветку)
$ git pull origin master
#Создаем файл
$ touch README.md
#Проверяем статус
$ git status
#Добавляем файл в гит
$ git add README.md
#Оставляем свой коммит
$ git commit -m"added README.md"
#Пушим наш файл
$ git push origin masterДобавить на сервисе GitHub в репозитории lab02 файл .gitignore со следующем содержимом:
*build*/
*install*/
*.swp
.idea/#Обновляем ветку
$ git pull origin master
#Смотрим историю изменений
$ git log#Создаем папки
$ mkdir sources
$ mkdir include
$ mkdir examples
#Создаем файлы и вводим нужные данные
$ cat > sources/print.cpp <<EOF
#include <print.hpp>
void print(const std::string& text, std::ostream& out)
{
out << text;
}
void print(const std::string& text, std::ofstream& out)
{
out << text;
}
EOF#Создаем файлы и вводим нужные данные
$ cat > include/print.hpp <<EOF
#include <fstream>
#include <iostream>
#include <string>
void print(const std::string& text, std::ofstream& out);
void print(const std::string& text, std::ostream& out = std::cout);
EOF#Создаем файлы и вводим нужные данные
$ cat > examples/example1.cpp <<EOF
#include <print.hpp>
int main(int argc, char** argv)
{
print("hello");
}
EOF#Создаем файлы и вводим нужные данные
$ cat > examples/example2.cpp <<EOF
#include <print.hpp>
#include <fstream>
int main(int argc, char** argv)
{
std::ofstream file("log.txt");
print(std::string("hello"), file);
}
EOF#Редактируем файлы
$ edit README.md#Пушим в гит , то что изменили
$ git status
$ git add .
$ git commit -m"added sources"
$ git push origin master#Переход в папку labs
$ cd ~/workspace/labs/
#Создаем переменную
$ export LAB_NUMBER=02
#Клонируем репозиторий в папку
$ git clone https://github.com/tp-labs/lab${LAB_NUMBER}.git tasks/lab${LAB_NUMBER}
#Создаем папку
$ mkdir reports/lab${LAB_NUMBER}
#Копируем файлы в эту папку
$ cp tasks/lab${LAB_NUMBER}/README.md reports/lab${LAB_NUMBER}/REPORT.md
#Переходим в нее
$ cd reports/lab${LAB_NUMBER}
#Редактируем файл и отправляем его на гист
$ edit REPORT.md
$ gistup -m "lab${LAB_NUMBER}"- Создайте пустой репозиторий на сервисе github.com (или gitlab.com, или bitbucket.com).
- Выполните инструкцию по созданию первого коммита на странице репозитория, созданного на предыдещем шаге.
- Создайте файл
hello_world.cppв локальной копии репозитория (который должен был появиться на шаге 2). Реализуйте программу Hello world на языке C++ используя плохой стиль кода. Например, после заголовочных файлов вставьте строкуusing namespace std;. - Добавьте этот файл в локальную копию репозитория.
- Закоммитьте изменения с осмысленным сообщением.
- Изменитьте исходный код так, чтобы программа через стандартный поток ввода запрашивалось имя пользователя. А в стандартный поток вывода печаталось сообщение
Hello world from @name, где@nameимя пользователя. - Закоммитьте новую версию программы. Почему не надо добавлять файл повторно
git add? - Запуште изменения в удалёный репозиторий.
- Проверьте, что история коммитов доступна в удалёный репозитории.
#ниже представлен листинг программы , 1-3 пункты сделал на гитхабе.
$ git init
$ touch hello_world.cpp
$ git add hello_world.cpp
$ git commit -m "[my first commit]"
$ git log
$ git clone https://github.com/TurboFen/Homework.git
$ git add .
$ git commit -m "modified program"
$ git push origin master
$ cd Homework
$ git push origin master
$ git commit -m "my modified program"
$ git add hello_world.cpp
$ git commit -m "my modified program"
$ git push origin master
Note: Работать продолжайте с теми же репоззиториями, что и в первой части задания.
- В локальной копии репозитория создайте локальную ветку
patch1. - Внесите изменения в ветке
patch1по исправлению кода и избавления отusing namespace std;. - commit, push локальную ветку в удалённый репозиторий.
- Проверьте, что ветка
patch1доступна в удалёный репозитории. - Создайте pull-request
patch1 -> master. - В локальной копии в ветке
patch1добавьте в исходный код комментарии. - commit, push.
- Проверьте, что новые изменения есть в созданном на шаге 5 pull-request
- В удалённый репозитории выполните слияние PR
patch1 -> masterи удалите веткуpatch1в удаленном репозитории. - Локально выполните pull.
- С помощью команды git log просмотрите историю в локальной версии ветки
master. - Удалите локальную ветку
patch1.
$ git checkout -b patch1
$ git add hello_world.cpp
$ git commit -m "my new modified program"
$ git push origin patch1
$ git add hello_world.cpp
$ git commit -m "pull request modify"
$ git push origin patch1
#Удаление удаленной ветки
$ git push origin --delete patch1
$ git pull origin master
$ git checkout master
$ git pull origin master
#Удаление локальной ветки
$ git branch -d patch1Note: Работать продолжайте с теми же репоззиториями, что и в первой части задания.
- Создайте новую локальную ветку
patch2. - Измените code style с помощью утилиты clang-format. Например, используя опцию
-style=Mozilla. - commit, push, создайте pull-request
patch2 -> master. - В ветке master в удаленном репозитории измените комментарии, например, расставьте знаки препинания, переведите комментарии на другой язык.
- Убедитесь, что в pull-request появились конфликтны.
- Для этого локально выполните pull + rebase (точную последовательность команд, следует узнать самостоятельно). Исправьте конфликты.
- Сделайте force push в ветку
patch2 - Убедитель, что в pull-request пропали конфликтны.
- Вмержите pull-request
patch2 -> master.
$ git checkout -b patch2
#Установка и применение текстового редактора
$ sudo apt install clang-format
$ clang-format -style=Mozilla hello_world.cpp > task3.cpp
$ mv task3.cpp hello_word.cpp
$ git add helo_world.cpp
$ git commit -m "change for clang-format"
$ git pull origin patch2
$ git checkout master
#Ниже я разбирался с устранением конфликта в пул реквесте и последней операцией некоторые репозитории удалились но в интернете пишут что это нормально
$ git pull origin patch2
$ git checkout patch2
$ git pull origin master
$ git add hello_world.cpp
$ git commit -m "try to rebase"
$ git push origin patch2
$ git pull origin patch2
$ git rebase master
$ git push --force origin masterCopyright (c) 2015-2019 The ISC Authors