| 20 | |
| 21 | == Подробная инструкция к сдаче первого ДЗ == |
| 22 | |
| 23 | Если на любом этапе возникают проблемы — просите помощи (например, у своего преподавателя по практике). |
| 24 | Если какая-то команда не работает, но вы догадались, как её исправить — пожалуйста, напишите Егору Суворову, чтобы инструкцию обновили. |
| 25 | Даже если прочли инструкцию, прочитайте общие комментарии выше! |
| 26 | |
| 27 | Инструкция верна только **для первой лабораторной**. |
| 28 | Но даже первую лабораторную можно сдавать чуть другими командами. |
| 29 | |
| 30 | 1. Убедитесь, что у вас установлен клиент для [https://ru.wikipedia.org/wiki/Subversion системы контроля версий Subversion (SVN)]: запустите в консоли команду `svn --version`. Она должна вывести строчку вроде `svn, version 1.8.13` (точная версия неважна). |
| 31 | * Если команда `svn` не найдена, поставьте клиент. Под Ubuntu это можно сделать командой `sudo apt-get install subversion`. Может потребоваться ввести пароль пользователя для запуска команды `sudo`. |
| 32 | 1. Найдите в почте письмо с темой `[HSE] C++ SVN repository`, отправленное примерно 5 сентября 2019. Там должны быть: |
| 33 | * Ваш логин и пароль — они совпадают для Trac (страница, на которой вы сейчас находитесь) и SVN. Логин вида `lastname.firstname` (ваши фамилия и имя латиницей, разделённые точкой). |
| 34 | * Также там должна быть ссылка на ваш личный SVN-репозиторий вида `https://trac.compscicenter.ru/hse-svn/cpp19/ivanov.ivan`. |
| 35 | 1. Убедитесь, что пароль работает: зайдите [https://trac.compscicenter.ru/hse/login на страницу логина Trac] и введите логин с паролем. |
| 36 | 1. В домашней папке создаёте папку `cpp2019`. |
| 37 | 1. В консоли зайдите в эту папку и выполните команду `svn checkout <адрес-вашего-репозитория>`, например, `svn checkout https://trac.compscicenter.ru/hse-svn/cpp19/ivanov.ivan`. Введите свой логин и пароль от SVN. |
| 38 | * Если у вас сразу спрашивают пароль для пользователя вроде `osboxes.org` (т.е. вашего пользователя в Ubuntu), просто нажмите Enter, ничего не набирая, после чего `svn` спросит логин. |
| 39 | * Теперь в текущей папке (`cpp2019`) появилась папка с названием `lastname.firstname`. В ней есть только скрытая папка с именем `.svn` — это нормально. Все файлы, положенные в эту папку (и только они) могут быть загружены в систему контроля версий. Она будет называться ''корнем личного репозитория''. |
| 40 | 1. Создайте внутри корня личного репозитория папку `lab_01` (регистр и нижние подчёркивания важны!). |
| 41 | 1. Создайте внутри папки `lab_01` папки `bin`, `include`, `src`, а также файл `Makefile` (регистр важен!). |
| 42 | 1. Скопируйте файлы `*.c` из задания внутрь папки `src`. |
| 43 | 1. Допишите `Makefile`, `*.c`-файлы, создайте нужные `*.h`-файлы внутри папки `include`. |
| 44 | * При запуске команды `make` под Linux в папке `lab_01` без параметров в папке `lab_01` должен появляться исполняемый файл `lab1`. Под Windows можно создавать файл `lab1.exe` — в правильно написанном `Makefile` это получится автоматически, специально для Windows ничего делать не надо. |
| 45 | 1. Проверьте, что решение корректно. |
| 46 | 1. Закрепите изменения в репозитории (см. ниже). |
| 47 | 1. Перейдите на страницу https://trac.compscicenter.ru/hse/newticket и создайте новый тикет. |
| 48 | 1. В поле `Summary` впишите `WW #1`. |
| 49 | 1. Поле `Reporter` оставьте без изменений, тут должен быть ваш логин в Trac и SVN. |
| 50 | 1. В поле `Type` оставьте `ожидается проверка`. |
| 51 | 1 В поле `Component` выберите `WW_make`. |
| 52 | 1. В поле `Version` выберите `1.0`. |
| 53 | 1. В группе `Action` выберите `assign to` и в поле справа впишите логин преподавателя (фамилия латиницей): `sokolov`, `sviridkin`, `lapshin`, `suvorov`, `huletski`, `alferov`. |
| 54 | 1. Если хотите, можете написать комментарии по решению в поле `Description`. Вопросы лучше писать напрямую преподавателю. |
| 55 | 1. Нажмите кнопку "Create ticket" |
| 56 | |
| 57 | === Исправление замечаний === |
| 58 | Если вам пришли замечания, которые вы хотите исправить и попробовать сдать ещё раз: |
| 59 | |
| 60 | 1. Исправьте в папке `lab_01` все замечания. |
| 61 | 1. Проверьте, что решение корректно. |
| 62 | 1. Проверьте, что все замечания исправлены. |
| 63 | 1. Закрепите изменения в репозитории (см. ниже). |
| 64 | 1. Перейдите на страницу своего тикета. Если хотите, добавьте ответы на замечания в поле `Add comment` внизу. После этого откройте группу `Modify Ticket` и обновите свойства: |
| 65 | 1. Смените `Version` на более старшую: `1.0` на `2.0`, а `2.0` — на `3.0`. Версия `3.0` — это последняя попытка сдать. |
| 66 | 1. Смените `Type` на `ожидается проверка`. |
| 67 | 1. Остальные поля (в том числе `Description`) оставьте без изменений. |
| 68 | |
| 69 | === Закрепление изменений в репозитории === |
| 70 | Закрепление (commit) изменений в SVN происходит в две стадии, независимо от того, сдаёте вы домашнее задание в первый раз или исправляете. |
| 71 | |
| 72 | 1. Сначала вы отмечаете файлы, которые надо добавить/удалить из репозитория. Подключение к интернету для этого не требуется. |
| 73 | 2. После этого вы выполняете команду `svn commit`, которая просит указать комментарий к внесённым изменениям (опционально) и отправляет данные на сервер. Для этого требуется подключение к интернету. |
| 74 | |
| 75 | Как отмечать файлы: |
| 76 | 1. Перейдите в корень личного репозитория. |
| 77 | 1. Командой `svn status` выясните текущее состояние файлов в репозитории. Каждый файл/папка в необычном состоянии будет выведен отдельной строкой. |
| 78 | * Знаком `?` отмечены файлы или папки, которые не добавлены в репозиторий ни в каком виде. |
| 79 | * Знаком `A` отмечены файлы или папки, которые будут добавлены в репозиторий в ближайшем коммите. |
| 80 | * Знаком `D` отмечены файлы или папки, которые будут удалены из репозитория в ближайшем коммите. |
| 81 | * Знаком `M` отмечены файлы или папки, которые изменились по сравнению с последним коммитом. Эти изменения будут закреплены в ближайшем коммите. |
| 82 | 1. Если есть файлы, которые в репозиторий добавлять не требуется (например, исполняемый файл `lab1`), уберите их командой `svn rm --keep-local lab1`. Ключ `--keep-local` означает "удалить файл из репозитория, но не с жёсткого диска". |
| 83 | 1. Если есть папки или файлы, которые надо добавить (например, `bin`), добавьте их командой `svn add --non-recursive bin`. Ключ `--non-recursive` означает "не отмечай рекурсивно все файлы и папки из добавляемой папки". |
| 84 | 1. Командой `svn status` убедитесь, что в репозиторий отправляются только нужные файлы, а ненужные (объектные файлы, исполняемый файл, временные файлы для отладки) — не отправляются. |
| 85 | * Вы также можете научить `svn` игнорировать файлы с определённым именем в произвольной папке, чтобы можно было обновлять всю папку рекурсивно — см. ниже (это не требуется для сдачи ДЗ). |
| 86 | 1. Выполните команду `svn commit` и введите комментарий к коммиту (опционально). |
| 87 | |
| 88 | === Игнорирование файлов === |
| 89 | 1. Если вы уже добавили ненужные файлы по ошибке, уберите их командой `svn rm --keep-local` |
| 90 | 1. Выполните команду `svn propedit svn:ignore` в папке, для которой требуется настроить игнорирование. |
| 91 | 1. В открывшемся текстовом редакторе напишите маски для имён файлов, которые надо игнорировать, по одной на строчку. |
| 92 | * Например: `lab1` или `*.in`. |
| 93 | 1. Сохраните файл и закройте редактор. |
| 94 | 1. Командой `svn status` убедитесь, что все ненужные файлы теперь игнорируются, а папка с обновлённым правилами игнорирования помечена буквой `M`. |
| 95 | |
| 96 | === Прочие любопытные команды === |
| 97 | `svn log`, `svn diff`, `svn revert` — запустите их с ключом `--help` и загуглите, чтобы узнать, что они делают. |