1.0.Terms.and.Definitions.md
Базовые понятия
Каждый воспринимает слова по своему… Если тебя просят принести молоток, то надо принести молоток, а не киянку или кузнечный молот. А вот на просьбу принести отвёртку - следует уточнить какую именно.
Система Контроля Версий (СКВ) - чаще встречается Система управления версиями. Это ПО для облегчения работы с изменяющейся информацией. Подробнее тут
Курс основы Git не реклама, но сам не проходил
####Краткая выдержка и трактовка терминов в данной документации
Многие термины описаны неверно, но в нашем случае главное передать суть
Репозиторий - локально-внешнее хранилище где хранятся файлы, их история изменений и другая служебная информация. Если существует внешняя(remote) часть репозитория, то она расположена на сервере СКВ (внешний хостинг или личный).
Рабочая копия - локальная копия репозитория, с которой на текущий момент идет работа, не путать с веткой. В нашем случае это On-Disk Project (ODP)
Ветка / Brach - по сути это копия одного из состояний Репозитория, но при этом она изолирована от других изменений и других состояний.
Часто можно встретить такие ветки, остальное вкусовщина и решается на месте применения:
"master" / "stable" /"main" - основная, стабильная ветка. Состояние репозитория, которое стоит на продуктиве.
"develop" - основная ветка разработки, которая содержит функционал, который разрабатывается на текущий момент. Иногда имеет состояние "сборной солянки".
"release" - ветка, содержащая протестированные изменения, которые будут поставлены на продуктив.
"hotFix" - ветка для внесения исправления ошибок, которые всплывают на продуктиве.
"feature" - ветка разработки, которая содержит изменения по определенному функционалу.
"HEAD" - текущая ветка, появляется при переключении с ветки на ветку
Коммит / Commit - как процесс: фиксация изменений в рабочей копии, как элемент: конкретное состояние рабочей копии.
Идеологически Commit необходимо делать, когда атомарное изменение готово полностью.
Слияние / Merge - процесс слияния нескольких изменений, которые были сделано в одном файле.
Так же есть слияние веток, когда изменения одной ветви вливаются в другую ветвь, как правило это порождает много конфликтов.
Ребейз / ReBase - процесс переноса изменений ветки, таким образом, что вводимые изменения шли позже чем последний коммит в текущей ветке.
Позволяет избежать конфликтов, но создает проблемы, которые очень сложно решить в будущем. <p>
Крайне не рекомендуется делать rebase, когда разработчики работают с одними и теми же файлами.
Конфликт / Conflict - ситуация, когда изменения были произведены разными людьми в одном и том же файле, в одном и том же месте.
Пример:
Оригинал: if (i < 10) return false;
Изменения А: if (i == 0) return false;
Изменения B: if (i == 0 || i < 10) return false;
Конфликт: if (i == 0 || i < 10) return false;
Push - процесс отправка изменений из рабочей копии в репозиторий.
Pull - процесс получения изменений из репозитория в рабочую копию.
Cherry Pick - процесс получения изменений опредленного Коммита в текущую ветку. Отличается от Merge тем, что получает изменения только одного Коммита, а не всех коммитов из ветки.
Pull Request/Merge Request - запрос на отправку изменений. Как правило такие запросы создаются если нельзя сделать Push в ветку.
Такие запросы просматриваются на изменения, оцениваются и если все хорошо, то подтверждаются. Если плохо - отклоняются.
При подтверждении запроса происходит автоматическое слияние изменений.