PR. Первый контакт. Git-flow¶
Эталонный репозиторий¶
Первый пулл реквест https://github.com/magicmaker369/KotlinSprint/pull/1 Инициализация репозитория https://github.com/magicmaker369/KotlinSprint/
Привет! Есть проблемка в инициализации репозитория. Обрати внимание какие файлы должны быть на примере: [ https://github.com/magicmaker369/KotlinSprint/]( https://github.com/magicmaker369/KotlinSprint/)
В твоем проекте содержание отличается. Скорее всего ты не посмотрел или пропустил какие-то шаги в инструкции по инициализации репо. Рекомендую обязательно пересмотреть инструкцию и в новом проекте все пройти по шагам заново из подготовительного нулевого урока. Или вот прямая ссылка [https://vk.com/video-85562117_456239080?list=ln-EOtWrDmuyFUA4DJadq](https://vk.com/video-85562117_456239080?list=ln-EOtWrDmuyFUA4DJadq)
✅ Первый принятый PR¶
Привет! Великолепное оформление пулл реквеста, все нейминги корректные. Аппрув)
Теперь этот пулл реквест можно мержить в мастер. Перед созданием новой ветки (обязательно из мастера) не забудь сделать его Update, чтобы слитые изменения прилетели с сервера в локальный проект.
Привет! великолепное оформление пулл реквеста, все нейминги корректные)
по задаче все отлично, аппрув!
Теперь эту ветку можно мержить в мастер. напомню, перед созданием новой ветки надо переключиться в мастер, обновить его (чтобы слитые изменения прилетели в локальный проект) и только тогда бранчиться
🚫 Первое отклоненный PR¶
Я оставил комментарий для доработки. чтобы правильно залить изменения, надо:
- переключиться в Идее на нужную ветку
- внести изменения и сделать коммит в эту ветку (следить чтобы в стейдж не добавились лишние задачи, которые не относятся к данной задаче)
- отправить ссылку в бот на этот же пулл реквест к соответствующей задаче
㊙️ Пробелы (или отступы)¶
В IDEA есть автоформатирование кода: Находясь в файле Ctrl+Alt+L (для windows) или ⌥+⌘+L (для osx). Рекомендую взять в привычку прожимать автоформат всегда перед коммитом, чтобы все отступы и пробелы расставить по своим местам.
㊗️ Нейминг PR, ветки или commit message¶
По оформлению пулл реквеста:
- Префикс проекта с названием и номером урока задачи следует прописывать в названии пулл реквеста. Например, "KS-1-1 сделал то-то".
- Название ветки также должно содержать префикс проекта с номером урока и задачи, чтобы они все были уникальны и в них можно было легко ориентироваться. Слова в названии веток разделяются дефисами. Не используем кириллицу. Например, “KS-1-1-create-smth”.
Кириллица в названии ветки
В названии ветки кириллицу не используем. Все буквы декодируются в unicode символы, не входящие в диапазон таблицы `ASCII`. В следующий раз только англ. буквами делаем название.
Слишком длинное название ветки
Вижу у тебя слишком длинные названия веток, не смотря на то, что оформлены они корректно. В сообществе принято передавать суть задачи в 2-4 словах в среднем. Предлагаю следующие таски неймить чуть скромнее)
PR назван как в примере из видео
“do smth” или “сделал что-то” – это просто пример, надо писать свое и нечто осмысленное по этой задаче)
Корректировка нейминга PR
Вместо Task 5 Complete в названии pr нужно писать что-то свое и осмысленное по этой задаче, буквально в несколько слов
🧩 Нарушение Git-flow¶
Если закоммитил в мастер и забыл создать ПР
Ошибка в процессе Git Flow.
Ты нарушил процесс работы по Git Flow. Сначала ты сделал полноценный коммит задачи в мастер, а затем вспомнил, что нужно создать pull request. Но на этом этапе уже была допущена ошибка, так как непроверенный код попал в мастер.
Создание ветки после коммита.
Затем ты создал ветку. Но чтобы было что коммитить в эту ветку, ты решил внести изменения на восьмой строке, добавив два восклицательных знака. Таким образом, был создан коммит, и система позволила создать запрос на слияние.
Как это выглядит со стороны?
Теперь со стороны это выглядит так. Ты создал запрос на слияние задачи в мастер, говоря: Решение задачи состоит //тут пишем конкретнно, что человек изменил?//**только из двух восклицательных знаков на восьмой строке**, так как это единственное изменение в твоем pull request. И ты хочешь, чтобы эти изменения были добавлены в мастер.
Итог
В итоге, все сделано неправильно с самого начала, и такой код я не могу ревьюить. Не только потому, что это нарушение порядка действий, но и банально в пулл реквесте не могу оставлять комментарии в коде, который уже в мастере и не содержит изменений относительно пулл реквеста.
Напоминаю, согласно нашему флоу задачки без аппрува не сливаем. Тем более ее еще можно доработать. Предлагаю в будущем двигаться в привычном формате)
Есть нарушения в git флоу, то есть в логике работы с коммитами и ветками.
Обрати внимание, сначала ты сделал одну задачу, запушил и все ок.
Затем ты закоммитил в эту же ветку другую задачу задачу (либо создал следующую ветку из предыдущей рабочей ветки) – это видно в истории коммитов.
Что из этого следует? В пулл реквест с одной задачей попали изменения по задаче, которые должны быть только в другой ветке. Это нарушает суть разделения кода задач по веткам. Задача из одной ветки не должна знать и пересекаться с задачей из другой ветки.
На большом проекте затрагивается много файлов и если в одном ПР делать другие изменения (из другой задачи), то при слиянии может быть много проблем и/или гит конфликтов. Например, над кодом другой задачи уже работает программист, изменения из второй задачи не проверены и не протестированы (тестировщики проверяют функционал по конкретному тех. заданию в рамках данного описания задачи в конкретной ветке).
Новые ветки создаем только из мастера (который предварительно надо обновить, если до этого мержились задачи в гитхабе), чтобы не было пересечений с другими тасками)
Что делать?
в данном пулл реквесте надо:
- переключиться в ветку текущего ПР
- удалить лишний файл с задачей (физически из проекта)
- сделать коммит (с изменением удаления)
- прислать ссылку на этот же пулл реквест снова в бот
И новые ветки всегда создаем из основной ветки master.
Обрати внимание, что в пулл реквесте у тебя огромное количество измененных файлов. Вижу, что создан отдельный пакет и это изменение адреса package. Тем не менее гит флоу нарушен и чревато конфликтами в коде.
1. Ты в одной отдельно взятой задаче запушил все возможные изменения, когда задача тестируется только по конкретному условию.
2. Чтобы отбранчеваться для выполнения следующей задачи мастер будет уже в старом состоянии, при слиянии нескольких веток с разными изменениями будешь резолвить конфликты или есть риск влить в основную ветку неактуальный код
Такой рефакторинг делается либо в отдельной ветке, либо в в нашем случае допустимо, чтобы ты это влил в мастер самостоятельно. Но главное – не в составе пулл реквеста с какой-то определенной задачей.
Обрати внимание во вкладке с изменениями в этот ПР попал лишний файл (1-3 который не относится к этой задаче). Скорее всего ветка создалась не из мастера. Давай выпилим его (надо в этой ветке физически удалить файл из проекта, сделать коммит удаления и запушить. и отправить ПР снова на ревью).
**Предлагаю тебе не резолвить треды обсуждений здесь**, а то мне все равно приходится все раскрывать при повторной проверке, чтобы входить в контекст)
Нейминги в PR¶
В названии ветки кириллицу не используем. Все буквы декодируются в unicode символы, не входящие в диапазон таблицы ASCII. В следующий раз только англ. буквами делаем название.
Привет! Хорошее оформление пулл реквеста, но нейминги я бы привел в более общепринятый вид. С указанием префикса проекта, номера урока и задачи. Это относится и к названию пулл реквеста, и к названию ветки. Несколько комментариев по оформлению пулл реквеста:
Префикс проекта с названием и номером урока задачи следует прописывать в названии пулл реквеста. Например, "KS-1-1 сделал то-то”
Название ветки также должно содержать префикс проекта с номером урока и задачи, чтобы они все были уникальны и в них можно было легко ориентироваться. Слова в названии веток разделяются дефисами. Например, “KS-1-1-create-smth”.
Привет! Хорошее оформление пулл реквеста, но нейминги я бы привел в более общепринятый вид. С указанием префикса проекта, номера урока и задачи. Это относится и к названию пулл реквеста, и к названию ветки.
Это на будущее, сейчас аппрув. Теперь этот пулл реквест можно мержить в мастер. Перед созданием новой ветки (обязательно из мастера) не забудь сделать его Update, чтобы слитые изменения прилетели с сервера в локальный проект.
Привет! отличное оформление пулл реквеста, все нейминги верные. Есть проблемки с форматированием.
1. символ присваивания всегда обосабливается пробелами
2. при объявлении типа после двоеточия ставится пробел
Должно получиться вот так `var orderCount: Int = 45`
Чтобы внести изменения нужно будет переключиться в эту ветку, сделать коммит с изменениями и запушить. И отправить ссылку на этот же пулл реквест в бот к соответствующей задаче.
Привет! Хорошее оформление пулл реквеста, но нейминги я бы привел в более общепринятый вид. С указанием префикса проекта, номера урока и задачи. Это относится и к названию пулл реквеста, и к названию ветки.
Это на будущее, сейчас аппрув. Теперь этот пулл реквест можно мержить в мастер. Перед созданием новой ветки (обязательно из мастера) не забудь сделать его Update, чтобы слитые изменения прилетели с сервера в локальный проект.
Для доработки задачи при работе через Gist - отредактируй этот документ и присылай ссылку на него в бот к соответствующей задаче.
Комментарии на английском языке¶
Язык на котором пишутся коммиты и коментарии к PullRequest'ам как правило является частью флоу компании. Порой действительно есть требование писать их на английском языке, если команда мультиязычная или компания иностранная. Это уточняется отдельно.
В нашем же случае мы используем русский язык для коммит сообщений и коментариев.
Метода main – его отсутствие, аргументы¶
На будущее: комментарий про аргументы функции main(). Нам они пока не нужны (понадобятся только на курсовом проекте для токена бота).
Поэтому для чистоты кода предлагаю оставлять их пустыми в следующих тасках.
Привет! отличное оформление пулл реквеста, все нейминги верные. Однако в Kotlin нет необходимости создавать классы в файле, чтобы в них делать некий запускаемый код.
Kotlin - функциональный язык. Поэтому достаточно в файле объявить функцию с зарезервированным названием main() и в ней писать код, который можно исполнять.
Предлагаю так и сделать)
Чтобы внести изменения нужно будет переключиться в эту ветку, сделать коммит с изменениями и запушить. И отправить ссылку на этот же пулл реквест в бот к соответствующей задаче.
Конфликты¶
Данный пулл реквест невозможно смержить из-за образовавшихся конфликтов. Вот по этой ссылке в небольшом уроке я рассказываю почему он происходит и как его зарезолвить. Ссылка с таймкодом [https://youtu.be/vJdKYa49SqY?si=oV-vXh2sZQXoON1b&t=393](https://youtu.be/vJdKYa49SqY?si=oV-vXh2sZQXoON1b&t=393)
Есть нарушение гит-флоу) обрати внимание во вкладке с изменениями в этот ПР попал лишний файл (1-3 который не относится к этой задаче). Скорее всего ветка создалась не из мастера. Давай выпилим его (надо в этой ветке физически удалить файл из проекта, сделать коммит удаления и запушить. и отправить ПР снова на ревью).
Есть нарушения в git флоу, то есть в логике работы с коммитами и ветками.
Обрати внимание, сначала ты сделал одну задачу, запушил и все ок.
Затем ты закоммитил в эту же ветку другую задачу (либо создал следующую ветку из предыдущей рабочей ветки) – это видно в истории коммитов.
Что из этого следует? В пулл реквест с одной задачей попала задача, которая должна быть в другой ветке. Это нарушает суть разделения кода задач по веткам. Задача из одной ветки не должна знать и пересекаться с задачей из другой ветки.
На большом проекте затрагивается много файлов и если в одном ПР делать другие изменения (из другой задачи), то при слиянии может быть много проблем и/или гит конфликтов. Например, над кодом другой задачи уже работает программист, изменения из второй задачи не проверены и не протестированы (тестировщики проверяют функционал по конкретному тех. заданию в рамках данного описания задачи в конкретной ветке).
Новые ветки создаем только из мастера (который предварительно надо обновить, если до этого мержились задачи в гитхабе), чтобы не было пересечений с другими тасками)
Что делать?
в данном пулл реквесте надо:
- переключиться в ветку текущего ПР
- удалить лишний файл с задачей (физически из проекта)
- сделать коммит (с изменением удаления)
- прислать ссылку на этот же пулл реквест снова в бот
И новые ветки всегда создаем из основной ветки master.
На будущее старайся, чтобы в пулл реквест с конкретной задачей не попадали измененные файлы, которые к задаче не относятся) это нарушает гитфлоу. при коммите их достаточно не отмечать галкой и не добавлять в стейдж
Обрати внимание, что Pull Request содержит только код с правками для данного таска, а не весь таск целиком. В коммите `[Пересобрал проект]` ты добавил среди прочего решение для первой задачи.
В реальных проектах такой беспорядок порицается, по факту - в master попали изменения, которые еще не были никем просмотрены.
Самое главное исключить вариант, когда в разных ветках будет отредактирован один и тот же файл. Это называется "конфликты". Потому что система не будет понимать какой код приоритетнее. Их можно зарезолвить и даже в рамках курсового проекта будет на это практика, но пока лучше не доводить до такого.
Сейчас такого возникнуть не должно. Ветка с определенным коммитом - это определенное состояние проекта. И гит умный, командой merge (слияние) он добавит новый файл с задачей из новой ветки в существующий пакет. Конечно, если этот файл будет иметь другое название. Это и есть безопасное слияние двух состояний проекта, где файлы не конфликтуют друг с другом.
Еще можно упростить себе жизнь, сделав заглушки на несколько уроков вперед и самостоятельно их запушить сразу в мастер. Тогда не придется для каждой ветки создавать новые пакеты с файлом, а просто писать задачу в соответствующем.
Ну и отвечая на вопрос, можно безопасно создавать ветки параллельно, но всегда обязательно от мастера. Если до этого в него был сделан мердж другой ветки, то его надо обновить (клик на ветку справа внизу в Идее и Update), чтобы изменения с сервера появились в локальном проекте