== Терминология == "ДЗ" может использоваться как для больших домашних заданий, так и для еженедельных, даже в одном предложении. "Лабораторная" может использоваться только для недельных домашних заданий. == Процесс сдачи ДЗ == 1. Для каждой домашней работы должна быть создана отдельная папка в Subversion-репозитории. Точное имя директории, а также список и названия исходных файлов, которые необходимо использовать, будут указаны в формулировке задачи. Не кладите в репозиторий ненужные файлы (файлы проектов, настройки IDE, бинарники и т. д.). 2. После реализации задачи и ее коммита в репозиторий в системе Trac (https://trac.compscicenter.ru/hse/) должен быть создан тикет (ticket) проверяющему преподавателю (owner). Логины преподавателей — lapshin, suvorov, sokolov, alferov, sviridkin, huletski. Логин в trac совпадает с логином в Subversion-репозитории. 3. Этот тикет должен иметь тип «Ожидается проверка», компонент «HW #N» (домашнее задание) или «WW #N» (недельное задание) (N --- номер ДЗ) и версию «M» (M --- номер попытки). В ответ на этот тикет преподаватель проверит вашу работу и изменит тип на «Ожидаются исправления» с описанием проблем. Об этом вам должна прийти нотификация на почту (если вы еще не настроили ее в trac’e, сделайте это как можно скорее). После исправлений вы снова изменяете тип тикета и его версию. Всего допускается 3 попытки сдачи задачи (3 версии ДЗ). 4. Результат сдачи задачи также будет указан в тикете (либо зачтена, либо нет с указанием причин). 5. При систематическом или грубом невыполнении рекомендаций проверяющий преподаватель оставляет за собой право не проверять задачу и поставить незачет. Уважайте, пожалуйста, труд проверяющего преподавателя. == Подробная инструкция к сдаче первого ДЗ == Если на любом этапе возникают проблемы — просите помощи (например, у своего преподавателя по практике). Если какая-то команда не работает, но вы догадались, как её исправить — пожалуйста, напишите Егору Суворову, чтобы инструкцию обновили. Даже если прочли инструкцию, прочитайте общие комментарии выше! Инструкция верна только **для первой лабораторной**. Но даже первую лабораторную можно сдавать чуть другими командами. 1. Убедитесь, что у вас установлен клиент для [https://ru.wikipedia.org/wiki/Subversion системы контроля версий Subversion (SVN)]: запустите в консоли команду `svn --version`. Она должна вывести строчку вроде `svn, version 1.8.13` (точная версия неважна). * Если команда `svn` не найдена, поставьте клиент. Под Ubuntu это можно сделать командой `sudo apt-get install subversion`. Может потребоваться ввести пароль пользователя для запуска команды `sudo`. 1. Найдите в почте письмо с темой `[HSE] C++ SVN repository`, отправленное примерно 5 сентября 2019. Там должны быть: * Ваш логин и пароль — они совпадают для Trac (страница, на которой вы сейчас находитесь) и SVN. Логин вида `lastname.firstname` (ваши фамилия и имя латиницей, разделённые точкой). * Также там должна быть ссылка на ваш личный SVN-репозиторий вида `https://trac.compscicenter.ru/hse-svn/cpp19/ivanov.ivan`. 1. Убедитесь, что пароль работает: зайдите [https://trac.compscicenter.ru/hse/login на страницу логина Trac] и введите логин с паролем. 1. В домашней папке создаёте папку `cpp2019`. 1. В консоли зайдите в эту папку и выполните команду `svn checkout <адрес-вашего-репозитория>`, например, `svn checkout https://trac.compscicenter.ru/hse-svn/cpp19/ivanov.ivan`. Введите свой логин и пароль от SVN. * Если у вас сразу спрашивают пароль для пользователя вроде `osboxes` (т.е. вашего пользователя в Ubuntu), просто нажмите Enter, ничего не набирая, после чего `svn` спросит логин. * Теперь в текущей папке (`cpp2019`) появилась папка с названием `lastname.firstname`. Она будет называться ''корнем личного репозитория''. Все файлы, положенные в эту папку (и только они) могут быть загружены в систему контроля версий. Сейчас в ней есть только скрытая папка с именем `.svn` — это нормально (скрытые папки можно увидеть командой `ls -a`). В папку `.svn` ничего класть не надо, там лежат внутренние файлы svn. Кладите рядом с `.svn`, прямо в корень личного репозитория. 1. Создайте внутри корня личного репозитория папку `lab_01` (регистр и нижние подчёркивания важны!). 1. Создайте внутри папки `lab_01` папку `correct` (это специфично для первой лабы, в остальных наверняка эта промежуточная папка не будет нужна). 1. Создайте внутри папки `correct` папки `include`, `src`, а также файл `Makefile` (регистр важен!). 1. Скопируйте файлы `*.c` из задания внутрь папки `src`. 1. Закрепите изменения в репозитории (см. ниже). Это можно сделать и потом, но если вы закрепите изменения сейчас, то будет удобнее отслеживать, что вы изменили. 1. Допишите `Makefile`, `*.c`-файлы, создайте нужные `*.h`-файлы внутри папки `include`. * При запуске команды `make` под Linux в папке `lab_01/correct` без параметров в папке `lab_01/correct` должен появляться исполняемый файл `lab1`. Под Windows можно создавать файл `lab1.exe` — в правильно написанном `Makefile` это получится автоматически, специально для Windows ничего делать не надо. 1. Выполните оставшиеся пункты задания, создав папки `unresolved` и `multiple` внутри папки `lab_01` и наполнив их нужным содержимым. 1. Проверьте, что решение корректно. 1. Закрепите изменения в репозитории (см. ниже). 1. Перейдите на страницу https://trac.compscicenter.ru/hse/newticket и создайте новый тикет. 1. В поле `Summary` впишите `WW #1`. 1. Поле `Reporter` оставьте без изменений, тут должен быть ваш логин в Trac и SVN. 1. В поле `Type` оставьте `ожидается проверка`. 1. В поле `Component` выберите `WW_make`. 1. В поле `Version` выберите `1.0`. 1. В группе `Action` выберите `assign to` и в поле справа впишите логин преподавателя (фамилия латиницей): `sokolov`, `sviridkin`, `lapshin`, `suvorov`, `huletski`, `alferov`. 1. Если хотите, можете написать комментарии по решению в поле `Description`. Вопросы лучше писать напрямую преподавателю. 1. Нажмите кнопку "Create ticket" 1. Ожидайте проверки. Если проверки нет в ожидаемый срок (по договорённости с преподавателем) — напишите преподавателю. === Исправление замечаний === Если вам пришли замечания, которые вы хотите исправить и попробовать сдать ещё раз: 1. Исправьте в папке `lab_01` все замечания. 1. Проверьте, что решение корректно. 1. Проверьте, что все замечания исправлены. 1. Закрепите изменения в репозитории (см. ниже). 1. Перейдите на страницу своего тикета. Если хотите, добавьте ответы на замечания в поле `Add comment` внизу. После этого откройте группу `Modify Ticket` и обновите свойства: 1. Смените `Version` на более старшую: `1.0` на `2.0`, а `2.0` — на `3.0`. Версия `3.0` — это последняя попытка сдать. 1. Смените `Type` на `ожидается проверка`. 1. Выберите `Action` `reassign to` и впишите туда логин своего преподавателя (фамилия маленькими латинскими буквами). После этого свойство `Owner` должно поменяться. 1. Остальные поля (в том числе `Description`) оставьте без изменений. === Закрепление изменений в репозитории === Закрепление (commit) изменений в SVN происходит в две стадии, независимо от того, сдаёте вы домашнее задание в первый раз или исправляете. 1. Сначала вы отмечаете файлы, которые надо добавить/удалить из репозитория. Подключение к интернету для этого не требуется. Отмечать файлы, которые в репозитории уже были, но поменялись, не требуется, они обнаружатся автоматически. 2. После этого вы выполняете команду `svn commit`, которая просит указать комментарий к внесённым изменениям (опционально) и отправляет данные на сервер. Для этого требуется подключение к интернету. Как отмечать файлы: 1. Перейдите в корень личного репозитория. 1. Командой `svn status` выясните текущее состояние файлов в репозитории. Каждый файл/папка в необычном состоянии будет выведен отдельной строкой. * Знаком `?` отмечены файлы или папки, которые не добавлены в репозиторий ни в каком виде. * Знаком `A` отмечены файлы или папки, которые будут добавлены в репозиторий в ближайшем коммите. * Знаком `D` отмечены файлы или папки, которые будут удалены из репозитория в ближайшем коммите. * Знаком `M` отмечены файлы или папки, которые изменились по сравнению с последним коммитом. Эти изменения будут закреплены в ближайшем коммите. * Знаком `!` отмечены файлы или папки, которые на диске отсутствуют, но которые были отмечены для добавления в репозиторий командой `svn add`. 1. Если есть файлы, которые в репозиторий добавлять не требуется (например, исполняемый файл `lab1`), уберите их командой `svn rm --keep-local lab1`. Ключ `--keep-local` означает "удалить файл из репозитория, но не с жёсткого диска". 1. Если есть папки или файлы, которые надо добавить (например, `bin`), добавьте их командой `svn add --non-recursive bin`. Ключ `--non-recursive` означает "не отмечай рекурсивно все файлы и папки из добавляемой папки". 1. Командой `svn status` убедитесь, что в репозиторий отправляются только нужные файлы, а ненужные (объектные файлы, исполняемый файл, временные файлы для отладки) — не отправляются. * Вы также можете научить `svn` игнорировать файлы с определённым именем в произвольной папке, чтобы можно было обновлять всю папку рекурсивно — см. ниже (это не требуется для сдачи ДЗ). 1. Выполните команду `svn commit` и введите комментарий к коммиту (опционально). === Игнорирование файлов === 1. Если вы уже добавили ненужные файлы по ошибке, уберите их командой `svn rm --keep-local` 1. Выполните команду `svn propedit svn:ignore .` в папке, для которой требуется настроить игнорирование. 1. В открывшемся текстовом редакторе напишите маски для имён файлов, которые надо игнорировать, по одной на строчку. * Например: `lab1` или `*.in`. * Скорее всего, у вас открылся редактор nano. В нём нельзя выделять текст, но можно его писать и стирать. 1. Сохраните файл и закройте редактор. * Из редактора `nano` можно одновременно выйти и сохранить файл сочетанием клавиш `Ctrl+X`. После этого сочетания надо либо согласиться сохранить файл (`y`), либо отказаться (`n`). Имя файла для сохранения оставьте без изменений. 1. Командой `svn status` убедитесь, что все ненужные файлы теперь игнорируются, а папка с обновлённым правилами игнорирования помечена буквой `M`. === Прочие любопытные команды === `svn log`, `svn diff`, `svn revert` — запустите их с ключом `--help` и загуглите, чтобы узнать, что они делают.