== Процесс проверки ДЗ 1. Для каждой домашней работы должна быть создана отдельная папка в Subversion-репозитории. Точное имя директории, а также список и названия исходных файлов, которые необходимо использовать, будут указаны в формулировке задачи. Не кладите в репозиторий ненужные файлы (файлы проектов, настройки IDE, бинарники и т. д.). 2. После реализации задачи и ее коммита в репозиторий в системе Trac (https://trac.compscicenter.ru/itmo/) должен быть создан тикет (ticket) проверяющему преподавателю (owner). Логин преподавателя — makarov. Логин в trac совпадает с логином в Subversion-репозитории. 3. Этот тикет должен иметь тип «Ожидается проверка», компонент «HW #N» (домашнее задание) или «WW #N» (недельное задание) (N --- номер ДЗ) и версию «M» (M --- номер попытки). В ответ на этот тикет преподаватель проверит вашу работу и изменит тип на «Ожидаются исправления» с описанием проблем. Об этом вам должна прийти нотификация на почту (если вы еще не настроили ее в trac’e, сделайте это как можно скорее). После исправлений вы снова изменяете тип тикета и его версию. Всего допускается 3 попытки сдачи задачи (3 версии ДЗ). 4. Результат сдачи задачи также будет указан в тикете (либо зачтена, либо нет с указанием причин). 5. При систематическом или грубом невыполнении рекомендаций проверяющий преподаватель оставляет за собой право не проверять задачу и поставить незачет. Уважайте, пожалуйста, труд проверяющего преподавателя. == Примерный алгоритм сдачи 1. Проверяете, что ваше решение компилируется, работает и удовлетворяет описанию конкретного домашнего задания и ​общим рекомендациям (см. документ на вики и текст ДЗ). 2. Делаете **commit** в репозиторий. 3. Создаёте **ticket** с просьбой о проверке. В поле владельца тикета должно быть **makarov**. 4. В тикете указываете `milestone`, к которому вы сдаёте, а также тип тикета **ожидается проверка** (текущее состояние тикета). 5. Ждёте ответа =) Не забудьте указать свой `email` в настройках для получения уведомлений. 6. Преподаватель проверяет вашу работу и выписывает замечания в тикете. 7. Если задача зачтена, тикет закрывается со статусом **задача сдана**. Конец. 8. Если задача не зачтена и время последней проверки истекло, тикет закрывается со статусом **задача НЕ зачтена**. Конец. 9. Если задача не зачтена, но время последней проверки не истекло, у тикета меняется тип на **ожидаются исправления** и указывается `milestone` после которого будет производится проверка. 10. Вы исправляете ошибки и замечания, делаете **commit** в репозиторий. 11. Если есть вопросы по решению или проверке, их необходимо задать в комментарии к тикету. 12. Когда вы считаете, что ваше решение можно проверять, меняете тип тикета на **ожидается проверка**. Переходите к шагу 5. 13. Каждая задача сдаётся в **отдельном тикете**. Все исправления, вопросы и замечания по одной и той же задаче оформляются в **одном и том же тикете**. == Краткое описание того, как пользоваться Subversion: Предположим, что вы получили следующие данные для авторизации в Subversion: * Логин: ilya.makarov * Пароль: 123qwe! * Адрес репозитория будет такой: https://trac.compscicenter.ru/itmo-svn/cpp21/ilya.makarov/ (это адрес вашей папки в репозитории). Для того, чтобы загрузить туда своё домашнее задание, совершенно бесполезно открывать соответствующую ссылку в браузере. Для работы с Subversion нужно поставить и использовать клиент. О Subversion и используемых в нём сущностях и понятиях можно прочитать в ​данной книге [http://svnbook.red-bean.com/nightly/ru/index.html]. * Самый простой способ для Windows пользователей - поставить графический клиент [https://tortoisesvn.net/ ​TortoiseSVN], с которым всё просто и приятно. Для него доступна [https://tortoisesvn.net/docs/release/TortoiseSVN_ru/index.html ​документация на русском языке], в которой описаны [https://tortoisesvn.net/docs/release/TortoiseSVN_ru/tsvn-qs-basics.html ​основные концепции Subversion], [https://tortoisesvn.net/docs/release/TortoiseSVN_ru/tsvn-dug-checkout.html ​как сделать выгрузку], ​[https://tortoisesvn.net/docs/release/TortoiseSVN_ru/tsvn-dug-commit.html как добавить файлы и закоммитить в репозиторий], [https://tortoisesvn.net/docs/release/TortoiseSVN_ru/tsvn-dug-wcstatus.html ​как понять текущее состояние репозитория]. * Если у Вас не Windows или вы хотите всё делать из консоли, то смело ставьте консольный клиент (например, sudo apt-get install subversion на Debian-based дистрибутиве Linux). Для консольного клиента доступно ​руководство по использованию на русском языке, в котором описаны ​[http://svnbook.red-bean.com/nightly/ru/svn.basic.html фундаментальные понятия], [http://svnbook.red-bean.com/nightly/ru/svn.tour.initial.html ​как сделать выгрузку], [http://svnbook.red-bean.com/nightly/ru/svn.tour.cycle.html ​как добавить файлы, закоммитить в репозиторий, понять текущее состояние репозитория]. === Примерная последовательность команд 1. При помощи клиента нужно выгрузить (**checkout**) репозиторий - у Вас создастся папка на компьютере. 2. После этого нужно создать внутри папку для домашнего задания. 3. Положить в неё свои файлы. Добавить (**add**) папку к репозиторию. 4. Сделать коммит (**commit**) изменений на сервер. **ВНИМАНИЕ: не стоит добавлять в репозиторий лишние файлы, такие как бинарные файлы или служебные файлы вашей IDE.** === Пример работы из консоли Для консольных пользователей последовательность команд должна быть примерно такой: {{{ $ svn checkout https://trac.compscicenter.ru/itmo-svn/cpp21/ilya.makarov/ --username ilya.makarov [ вводите пароль ] $ cd ilya.makarov $ mkdir ha1 [ кладёте в ha1 свои .cpp и .hpp файлы + Makefile ] $ svn add ha1 $ svn commit -m "Home assignment #1" [ теперь добавленные файлы доступны на сервере ] [ предположим, теперь нужно исправить ошибку в ha1/main.cpp ] [ вносите исправления в ha1/main.cpp ] $ svn add ha1/main.cpp $ svn commit -m "Fix main function" [ исправления отправлены на сервер ] }}} === Закрепление изменений в репозитории Закрепление (**commit**) изменений в SVN происходит в две стадии, независимо от того, сдаёте вы домашнее задание в первый раз или исправляете. Сначала вы отмечаете файлы, которые надо добавить/удалить из репозитория. Подключение к интернету для этого не требуется. Отмечать файлы, которые в репозитории уже были, но поменялись, не требуется, они обнаружатся автоматически. После этого вы выполняете команду `svn commit`, которая просит указать комментарий к внесённым изменениям (опционально) и отправляет данные на сервер. Для этого требуется подключение к интернету. Как отмечать файлы: 1. Перейдите в корень личного репозитория. 2. Командой `svn status` выясните текущее состояние файлов в репозитории. Каждый файл/папка в необычном состоянии будет выведен отдельной строкой. * Знаком **?** отмечены файлы или папки, которые не добавлены в репозиторий ни в каком виде. * Знаком **A** отмечены файлы или папки, которые будут добавлены в репозиторий в ближайшем коммите. * Знаком **D** отмечены файлы или папки, которые будут удалены из репозитория в ближайшем коммите. * Знаком **M** отмечены файлы или папки, которые изменились по сравнению с последним коммитом. Эти изменения будут закреплены в ближайшем коммите. * Знаком ! отмечены файлы или папки, которые на диске отсутствуют, но которые были отмечены для добавления в репозиторий командой `svn add`. 3. Если есть файлы, которые в репозиторий добавлять не требуется (например, исполняемые файлы), уберите их командой `svn rm --keep-local lab1`. Ключ `--keep-local` означает "удалить файл из репозитория, но не с жёсткого диска". 4. Командой `svn status` убедитесь, что в репозиторий отправляются только нужные файлы, а ненужные (объектные файлы, исполняемый файл, временные файлы для отладки) — не отправляются. 5. Вы также можете научить svn игнорировать файлы с определённым именем в произвольной папке, чтобы можно было обновлять всю папку рекурсивно — см. ниже (это не требуется для сдачи ДЗ). 6. Выполните команду `svn commit` и введите комментарий к коммиту. === Игнорирование файлов Если вы уже добавили ненужные файлы по ошибке, уберите их командой `svn rm --keep-local`. Выполните команду `svn propedit svn:ignore .` в папке, для которой требуется настроить игнорирование. В открывшемся текстовом редакторе напишите маски для имён файлов, которые надо игнорировать, по одной на строчку. Например: `*.obj` или `.in`. Скорее всего, у вас открылся редактор nano. В нём нельзя выделять текст, но можно его писать и стирать. Сохраните файл и закройте редактор. Из редактора nano можно одновременно выйти и сохранить файл сочетанием клавиш **Ctrl+X**. После этого сочетания надо либо согласиться сохранить файл (**y**), либо отказаться (**n**). Имя файла для сохранения оставьте без изменений. Командой `svn status` убедитесь, что все ненужные файлы теперь игнорируются, а папка с обновлённым правилами игнорирования помечена буквой **M**.