===== Правила работы с репозиториями в MOEVM Repositories (Forgejo) ===== ==== Мастер-классы по работе с git ==== - [[.git_rules:git_pull_request_video]] - [[.git_rules:pull_request_creation_steps]] - [[.git_rules:pull_request_changes]] ===== Требования к созданию Pull-Request'а ===== ==== 1. Настройки названия аккаунта в конфигурации ==== === 1.1. Текущие настройки конфигурации === Текущие настройки конфигурации можно вывести командой: git config --list В выводе этой команды необходимо обратить внимание на первые две строки: **user.name** и **user.email**. В них должны быть указаны корретные данные акканута студента. Свои данные можно найти в настройках аккаунта на git.moevm.info {{:courses:git_moevm_open_user.png?400|Где найти настройки своего аккаунта}} {{:courses:git_moevm_user_settings.png?400|Где найти данные своего аккаунта}} === 1.2. Добавление данных в конфигурацию === Свои данные можно добавить следующими командами: git config --local user.email ivan@ivanov.com git config --local user.name IvanIvanov , где ''ivan@ivanov.com'' -- это почта, указанная в аккаунте IvanIvanov Разница между ''--global'' и ''--local'' остаётся на [[https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration|самостоятельно изучение]] Проверяйте настройки конфигурации, прежде чем делать Pull Request с //компьютера в компьютерном классе на кафедре// Если в компьютерном классе использовался флаг ''--global'' то очистите свои данные при помощи команд из п. 1.2, чтобы следующий студент на этом компьютере не сделал свой pull-request в другой репозиторий с вашими данными. ==== 2. Именование ветки: <Фамилия>_<Имя>_<Вид и номер работы> ==== Пример именования ветки для студента Иванова Ивана, который хочет выполнить первую лабораторную работу: Ivanov_Ivan_lb1 Для указания лабораторных работ необходим префикс ''lb'', а для курсовой работы -- ''cw''. При этом для курсовой работы номер работы не нужен, так как курсовая работа единственная в семестре. Название lr или любое другое для лабораторной работы (как и для курсовой работы) засчитано не будет. ==== 3. Комменарий коммита должен быть осмысленным ==== Для добавления сообщения к коммиту можно использовать флаг ''-m'': git commit -m "Ivanov LB1: fixed the corner case in X function" **Комментарий к коммиту должен быть осмысленным**. Сообщения всех добавленных коммитов должны содержать фамилию и название работы, которая сделана в рамках коммита. ==== 4. Каждая новая лабораторная/курсовая/контрольная работа должна находиться в своей ветке, которая обязательно должна быть создана из ветки main ==== Пример перехода на ветку main и создания + перехода в новую ветку ''Ivanov_Ivan_lb3'': # Переход на ветку main git checkout main # Обновлении локальной ветки main из удаленного репозитория git pull origin main # Создание и переход на новую ветку git switch -c Ivanov_Ivan_lb3 ==== 5. Каждая лабораторная/курсовая/контрольная работа должна находиться в своей папке, которая должна называться также, как ветка ==== Пример создания папки на Linux: mkdir Ivanov_Ivan_lb3 ==== 6. В репозитории должен храниться только исходный код к лабораторным и отчёты ==== Файлы с исходным кодом должны находиться в **папке** ''src'' внутри папки с лабораторной работой. Никаких других файлов не должно быть в pull-request'е. Пример добавления файлов, создания коммита и отправки коммитов на удаленный репозиторий: # Добавление файла с исходным кодом git add Ivanov_Ivan_lb3/src/main.c # Добавление отчёта, если таковой необходим git add Ivanov_Ivan_lb3/Ivanov_Ivan_lb3.pdf # Создание коммита git commit -m "Ivanov_Ivan_lb3: done" # Отправка ветки в удаленный репозиторий git push origin Ivanov_Ivan_lb3 В корне репозитория лежит файл ''README.md'', в котором явно указаны имя, фамилия и forgejo логин студентов. Все коммиты в pull-request'е должны быть добавлены пользователем соответствующим студенту. ==== 7. Именование pull-request'а: <Фамилия>_<Имя>_<Вид и номер работы> ==== Правила для названия pull-request'а аналогичным правилам именования веток ([[#именование_веткифамилия_имя_вид_и_номер_работы|2. Именование ветки: <Фамилия>_<Имя>_<Вид и номер работы>]]) ==== 8. Все добавляемые/изменяемые/удаляемые файлы должны относиться к рабочей папке ==== Вне рабочей папки ничего менять нельзя, в том числе удалять чужие рабочие папки и добавлять свои документы в корень репозитория. Требования распространяется на **все коммиты** в pull-request'е. Если //**хотя бы один коммит**// содержит изменение вне рабочей папки, то pull-request считается некорректным. Недостаточно проверять, что **суммарные изменения** в pull-request'е не затрагивают изменения вне папки, так как отдельные коммиты могут отменять действия друг друга. ===== Автоматическая проверка pull-request'ов ===== Каждый открытый pull-request автоматически проверяется на соответствие правилам. В случае, если pull-request содержит нарушения, он закрывается с соответствующим комментарием и на него выставляется метка ''failed''. Дополнительные действия, за которые pull-request будет **автоматически закрыт**: - Добавление и снятие меток с pull-request'а - Добавление файлов с запрещенными расширениями. К запрещенным расширениям относятся .pyc, .o, .exe, .out, .txt - Pull-request создан пользователем с forgejo-логином, не соответствующим имени и фамилии, которые указаны в названии pull-request'а. - Pull-request содержит коммиты посторонних пользователей Если проверка была начата, то она заканчивается одним из трех результатов: * всё хорошо (passed), * есть нарушения (failed) В любом из случаев в комментариях к pull-request'у будет написан результат, и на pull-request будет установлена соответствующая метка (passed/failed). Pull-request считается корректным (**т.е. за него можно получить баллы**), если присутствует метка passed и корректный исходный код. * [[TBD|Описание меток на pull-request'е (TBD)]] * [[TBD|Гайд по сообщениям автоматической проверяющей системы (TBD)]] ===== Что делать, если мой Pull Request был закрыт? ===== Нужно исправить причины, по которым был закрыт Ваш Pull Request, и нажать кнопку "**Reopen**". **Нельзя создавать новый Pull Request** при наличии уже существующего с метками преподавателя или комментариями преподавателя. При __нарушении__ данного правила баллы за соответствующую работу **могут быть аннулированы (без возможности перезащиты) или снижены** на усмотрение преподавателя по лабораторным работам. Если по каким-то причинам __не удаётся исправить__ предыдущий pull request, то необходимо: - В новом pull-request'е оставить **ссылку на предыдущий pull-request** - Указать в комментарии **возникшую проблему в предыдущем pull-request** - **Сообщить преподавателю** по лабораторным работам о новом pull-request'е (см. [[.communication_rules]]) ===== Опечатка в названии аккаунта в истории коммитов -- что делать? ===== Часто бывает так, что при настройке //git config// случаются опечатки в названии аккаунта или почты. Любой неправильный символ приводит к тому, что система автоматической проверки распознает pull-request как сделанный некорректно. Чтобы исправить данную ошибку необходимо: - Удалить ветку в удаленном репозитории - Удалить ветку в локальном репозитории - Создать ветку заново - Сделать новый коммит - Отправить ветку в удаленный репозиторий # Удалить ветку в репозитории (можно сделать из веб версии) # Настроить git config правильно git config --local user.email ivan@ivanov.com git config --local user.name IvanIvanov # Переключиться на ветку main git switch main # Удалить ветку с неправильным коммитом git branch -d Ivanov_Ivan_lb3 # Создать ветку git switch -c Ivanov_Ivan_lb3 # Добавить файлы git add Ivanov_Ivan_lb3/src/main.c git add Ivanov_Ivan_lb3/Ivanov_Ivan_lb3.pdf # Создать коммит git commit -m "Ivanov_Ivan_lb3: done" # Отправить ветку в удаленный репозиторий git push origin Ivanov_Ivan_lb3 ===== Коммиты в ветку main ===== Запрещено делать любые коммиты в ветку main Это влечет за собой **минус 1 балл к итоговому рейтингу**. Штрафной балл начисляется **за каждый коммит!** Например, если сделано __3 коммита в ветку main__, то к рейтингу добавляется __3 штрафных балла__. ===== Что делать, если я случайно выполнил слияние (merge) своего pull-request'а? ===== * Теряются баллы за pull-request и баллы за защиту смерженной лабораторной работы. * Для получения баллов за pull-request **решить другой вариант лабораторной работы** * "Другой вариант" - следующий после того, который решался до этого * Предварительно необходимо проинформировать **преподавателя по лабораторным работам** (см. [[.communication_rules]]) * После этого можно создать новый pull-request с другим вариантом лабораторной работы * В комментарии нового pull-request'а необходимо указать: * Номер вариант, который был до * Ссылку на предыдущий pull-request * Номер нового вариант в новом pull-request * Если есть занятия по расписанию до крайнего срока, то можно защищать новый pull-request с другим вариантом лабораторной работы * Если самостоятельное слияния pull-request'а сделано после дедлайна, то баллы за защиту лабораторной работой восстановить невозможно