Предыдущий ролик Следующий ролик  

Видео урок: Терминология

Принципы контроля версий

Перед тем, как продолжить разговор о централизованном и распределенном контроле версий, давайте добавим в наш лексикон еще несколько терминов. Мы уже обсудили такие термины, как хранилище - база данных, в которой отслеживаются изменения; рабочий набор - локальные файлы с изменениями, которые еще не внесены в хранилище; добавление файлов и внесение изменений - способы внесения данных в хранилище; получение изменений и обновление - способы получения данных из хранилища в рабочий набор; и восстановление или откат - способы обновления рабочего набора до определенной версии из хранилища.

Распределенные системы хранения позволяют отправлять содержимое всего хранилища или конкретного набора изменений другим пользователям, работающим над тем же проектом. Для отправки изменений из одного хранилища в другое вы можете использовать один из двух способов: первый - отправить информацию на удаленный сервер через HTTP или SSH, второй - извлечь данные из хранилища для последующей отправки по электронной почте. Итак, при отправке изменений между локальным хранилищем и хранилищем на сервере используются термины пуш (push) и пул (pull).

Пуш отправляет изменения из вашего хранилища в хранилище на сервере, а пул получает изменения с сервера и добавляет их в локальное хранилище. Как я уже сказал, для подключения к серверу часто используются протоколы HTTP или SSH. Если вы хотите отправить изменения определенному человеку посредством электронной почты, вы будете делать то же самое, но использовать термины импорт и экспорт. Экспорт из хранилища - это извлечение изменений из хранилища в файл, который вы можете прикрепить к письму и отправить, и наоборот, импорт - обновление локального хранилища из файла, который кто-то еще отправил вам.

Одна из наиболее важных особенностей в ПО контроля версий - это возможность давать имена определенным состояниям хранилища. Как я уже говорил, эти имена называются тегами или метками. С помощью тега можно сказать, что все файлы в этом конкретном хранилище или все файлы в этом проекте в хранилище находятся в определенном состоянии, к которому я хочу вернуться позже. Например, вы отправляете клиенту версию 1 и начинаете работать над версией 2, а через 2 месяца ваш клиент говорит, что ему нужно внести изменения в версию 1 прямо сейчас. Он не может ждать второй версии. Вам нужна возможность вернуться к конкретному состоянию версии 1, извлечь все файлы, которые представляют собой то состояние вашего продукта, сайта или сочинения, которое было на момент выпуска версии 1, внести некоторые изменения и сохранить их отдельно от того, с чем вы работаете для версии 2.

Иногда в процессе работы над проектом вы хотите поэкспериментировать, например, что будет, если я перестрою эту конкретную функцию, или изменю размер веб-сайта, или уберу этот припев и добавлю еще один переход в песню? ПО контроля версий позволяет делать копии всего вашего хранилища и работать в них как в "песочнице". Эти копии называются ветками или вилками. Когда вы закончите эксперименты и решите, что получили то, что хотели, вы можете добавить свои изменения в главную часть исходного кода.

Это называется слиянием. То, от чего вы делаете ответвления, часто называют главной веткой (main branch), иногда - стволом (trunk). При слиянии вы объединяете отдельную ветку со стволом или главной веткой. Иногда это нужно потому, что ваш продукт состоит из многих частей, и вы хотите работать с ними по-отдельности. Например, у вас есть приложение с компонентами обработки изображений и звука, и над ними работают два разных разработчика. В этом случае вы можете создать две ветки, одну - для разработчика компонента обработки изображений, другую - для разработчика компонента записи аудио.

Потом, когда разработчик компонента изображений завершит работу, он сольет будущие обновления в ствол. Это особый вид слияния, который называется обратной интеграцией. Если разработчик компонента аудио также выполнил обратную интеграцию и слил обновления в главную ветку, разработчик компонента изображений, вероятно, захочет получить эти изменения, прежде чем продолжать работу и вносить дальнейшие изменения. Таким образом, он может захватить обновления из главной ветки в процессе прямой интеграции, который похож на создание новой ветки. Изменения из ствола будут просто скопированы в частную ветку этого разработчика.

Разработчик компонента аудио может сделать то же самое с изменениями компонента изображений. Далее в курсе мы рассмотрим это и на понятийном уровне, и в действии.