- Все работы необходимо загрузить в этот репозиторий.
- Все работы должны быть быть написаны в рамках стандарта C++14.
- Работы необходимо размещать в собственном каталоге с названием в формате
<фамилия>.<имя>
, набранным строчными латинскими символами (напримерivanov.ivan
). - Каждая работа должна быть в отдельном каталоге с соответствующим названием:
T0
- пробная (здесь и далее буква T латинская)T2
- задание 1, потоки и итераторы (номер 2 - не опечатка)T3
- задание 2, алгоритмыF0
- РГР
- Каждую работу необходимо выполнять в собственной ветке Git с названием
<фамилия>.<имя>/<работа>
(ivanov.ivan/T0
). - Для того, чтобы работа была принята, необходимо создать pull request. На каждую работу должен быть создан свой pull request и при том только один!
- Каждый коммит должен обладать комментарием, из которого понятно, что и зачем было сделано.
- Длина строк не должна превышать 100 символов.
- Для отступов должны использоваться только пробелы, не табуляции! (Для VisualStudio Tools → Options → Text Editor → [язык] → Tabs → Insert spaces)
- Окончания строк и конца файла должны быть в unix-style, последним символом в каждом файле должен быть символ перевода строки. Те, кто использует Git в Windows, могут установить указанную ниже настройку или выбрать соответствующий пункт при установке (руководство)
git config --global core.autocrlf true
- Вывод каждой работы должен заканчиваться переводом курсора на новую строку.
- Работы должны сдаваться по порядку (см. файл .config в корне репозитория).
Реализуйте программу, которая выводит в стандартный вывод на отдельной строке ваши фамилию и имя, разделенные точкой:
ivanov.ivan
Далее приведены некоторые команды на Bash (консоль Git Bash для Windows устанавливается вместе с Git)
- Скачайте и установите Git на свой компьютер с сайта или через менеджер пакетов.
- Настройте Git.
- Вы можете установить графический интерфейс, например SourceTree, или воспользоваться средствами, встроенными в IDE.
- Учебник
- Сделайте fork репозитория средствами GitHub
- Получите локальный репозиторий (git clone):
cd <путь до каталога, где вы хотите разместить репозиторий>
git clone <ссылка на fork>
- Перейдите в каталог с локальным репозиторием:
cd <локальный репозиторий>
- Добавьте основной репозиторий в список удалённых (remote):
git remote add upstream https://github.com/ilya-shemyakin/30002.git
- Проверьте, что локальный репозиторий связан с вашим и с основным удалёнными репозиториями:
git remote get-url origin
– должна быть ссылка на ваш forkgit remote get-url upstream
– должна быть ссылка на основной репозиторий
- Переключиться на master-ветку:
git checkout master
- Создать новую ветку с необходимым названием от master-ветки в локальном репозитории и переключиться на нёё:
git checkout -b ivanov.ivan/T0
- Создать папку для новой работы. Сделать это можно разными способами, в т.ч. и через IDE, но отправлять на проверку файлы, созданные IDE не нужно.
- Создать main.cpp, содержащий компилирующуюся функцию
main()
и добавить его в Git:
git add ivanov.ivan/T0/main.cpp
- Cоздать коммит:
git commit -m "Initial commit for T0"
- Создать ветку в своём удалённом репозитории (fork) и отправить первую версию работы туда:
git push -u origin ivanov.ivan/T0
- Добавить изменённые файлы в Git:
git add <имя файла>
- Создать новый коммит:
git commit -m "<сообщение>"
- отправить изменения в свой удалённый репозиторий (fork):
git push
Все эти шаги вы можете проделать и через графический интерфейс.
После отправки готовой работы в свой удалённый репозиторий (fork), необходимо отправить её на проверку в основной репозиторий. Для этого средствами GitHub создайте pull request из соответствующей ветки fork'а в master ветку основного репозитория.
Также для проверки выполнения тестов можно создать pull request в master ветку fork'а, но принимать (merge) этот pull request не следует! Для активации тестов необходимо нажать кнопку "Enable..." на странице Actions.
Работы должны сдаваться по порядку. После того, как ваш pull request принят (merge) в основном репозитории, необходимо синхронизировать master-ветки fork и основного репозитория:
- Переключиться на master-ветку в локальном репозитории:
git checkout master
- Скачать метаданные Git из основного репозитория:
git fetch upstream
- Объединить изменения из master основного репозитория в master локального:
git merge upstream/master
- Отправить изменения master локального репозитория в свой удалённый (fork):
git push
Если в этот момент вы уже выполняете следующую работу в другой ветке, то необходимо добавить в неё изменения из локальной ветки master:
- Переключиться на ветку с лабораторной:
git checkout -b ivanov.ivan/T2
- Синхронизировать рабочую ветку с локальной веткой master
git merge master
- Синхронизируем изменения в локальной ветке с соответствующей веткой в своём удалённом (fork) репозитории
git push
- На проекте используется Continuous Integration (CI), соответственно, сборка и тестирование выполняются автоматически. Коммиты, не прошедшие CI (с ошибкой или пропустившие CI) не принимаются.
- Для сборки и запуска работ присутствует Makefile для GNU Make.
- Файл "main.cpp" особенный: его назначение - функция
main()
выполненной работы.
-
На соответствие обязательным требованиям (частично):
Content:
- проверка некоторых пунктов CG (длина строк, пробелы, окончания строк/файла)
- проверка на порядок сдачи работ (см. файл .config в корне репозитория)
Branch:
- проверка, что лабораторная отправлена из форка
- проверка, что существует только один начальный коммит
Author:
- проверка, что не затронуты чужие работы
- проверка, что не затронуты файлы в корне репозитория
- проверка, что имя папки в нижнем регистре
-
На сборку (с помощью Makefile)
Build: вызывается команда
make build-ivanov.ivan/T0
-
Приёмочные тесты:
Acceptance: зависят от лабораторной работы. Для не пройденных тестов показываются входные данные и ожидаемый вывод
Все работы автоматически обнаруживаются и могут быть построены с использованием нескольких целей.
Все исходные тексты в каждой работе идентифицируются по расширению ".cpp".
Идентификатором каждой работы является строка lastname.firstname/labnumber
, которая в дальнейшем именуется labid
.
Makefile автоматически строит программу для каждой работы. Так как имя программы в общем случае неизвестно, специальная цель выполняет запуск построенной программы с передачей параметров.
Поддерживаемые цели:
-
build-labid
: построение лабораторной работы, например$ make build-ivanov.ivan/T2
-
run-labid
: запуск построенной программы, например$ make run-ivanov.ivan/T2
Для передачи дополнительных параметров используется переменная
ARGS
(при помощи GNU Make):$ make run-ivanov.ivan/T1 ARGS="1 ascending"
или (c использованием Bourne Shell):
$ ARGS="1 ascending" make run-ivanov.ivan/T1
или (Bourne Shell, с сохранением в окружении процесса):
$ export ARGS="1 ascending" $ make run-ivanov.ivan/T1
-
labs
: список всех лабораторных в проекте.
Дополнительной возможностью является запуск динамического анализатора Valgrind для запускаемых программ.
Для этого необходимо указать в переменной VALGRIND
параметры анализатора так, как это делается для ARGS
.