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 в ветку.

Такие запросы просматриваются на изменения, оцениваются и если все хорошо, то подтверждаются. Если плохо - отклоняются.

При подтверждении запроса происходит автоматическое слияние изменений.
Ссылка на вики репозиторий