Git (2) Commit и Branch

Фиксации

Теперь займемся наполнением нашего хранилища. Сейчас рабочая папка (у меня это MyTestProject) не содержит ничего кроме .git. Это значит, что репозиторий пуст. Чтобы исправить это, давайте создадим в нем текстовый файл (например, с именем test_file.txt) и заполним его каким-нибудь текстом.

image009

Примечание: Git не хранит пустые папки, только те, которые содержат какие-либо файлы!

Теперь наша рабочая папка не пуста – она содержит файл – и мы хотим, чтобы в нашем репозитории сохранилось текущее состояние проекта. Чтобы создать коммит развернем Git Gui и нажмем «Перечитать» (1.), т.е. обновить. В поле «Изменено (не будет сохранено)» появится наш свежесозданный файл. Кликнув по нему (2.), мы сможем просмотреть его содержимое в поле 3..

image010




Тот факт, что поле «Изменено…» содержит наш файл, означает, что Git заметил, что в нем произошли изменения, и теперь система сообщает нам об этом.

Прежде чем создать фиксацию, нам необходимо сообщить Git, какие из изменений должны быть учтены. Для этого кликнем на иконку листа бумаги рядом с названием файла (2.) и замечаем, что файл перекочевал в список «Подготовлено (будет сохранено)» (4.). Это значит, что он был проиндексирован. Тот же результат можно было получить, нажав «Подготовить все» (5.); в этом случае все файлы, в которых были изменения, будут проиндексированы.

image011

Теперь мы готовы создать свой первый коммит. Но сперва необходимо заполнить поле комментария (6.) для нашего нового коммита. Это описание, которое будет отображаться напротив нашего коммита в дереве проекта. Принято в первой строчке комментария указывать назначение изменений, а во второй – все изменения, которые были произведены (см. рисунок). Это делается для того, чтобы каждый, кто захочет посмотреть дерево проекта, мог сразу понять, какие новшества вносит каждый коммит в проект.

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

По окончании заполнения поля комментария следует нажать кнопку «Сохранить» (7.). Все! Теперь наш коммит создан! Взглянем на него, перейдя «Репозиторий» и потом «Показать историю всех ветвей».

image012

В появившемся окне (утилита gitk) мы можем видеть схематическое отображение дерева проекта (8.), состоящее пока только из одного коммита с нашим комментарием. Справа расположены имя человека, оставившего этот коммит, и дата размещения. В области 9. расположен уникальный идентификатор коммита, состоящий из двадцати шестнадцатеричных цифр. Поле 10. содержит полную информацию о коммите: имя автора, его электронную почту, дату сохранения, ветвь, подробный комментарий, а также все изменения, внесенные в каждый из файлов. Строка, выделенная зеленым, означает, что этот текст был добавлен в файл test_file.txt.

Вдоволь налюбовавшись новым коммитом, мы решаем создать еще один. Для этого измените содержание файла test_file.txt на то, которое понравится вам. Затем снова добавьте файл в список подготовленных, напишите комментарий к новому состоянию и создайте второй коммит – все по аналогии с первым коммитом. Сделайте это самостоятельно. И я тоже сделаю.

Когда задание будет выполнено, снова откройте gitk и посмотрите, что у вас вышло. У меня, например, вот это:

image013

Здесь видно, что дерево немного «выросло» – ровно на один коммит. В окне описания изменений появилось две новых зеленых строки (именно их я добавил в test_file.txt), а строка Just small text for our test. стала красной, потому что ее я удалил из файла.

Потренируйтесь создавать коммиты в своей «песочнице» (если вы прислушались к моему совету и создали ее). Размещайте новые файлы в новые папки, меняйте старые, перемещайте файлы с места на место (в пределах папки с репозиторием), можете даже закинуть какой-нибудь source-файл – все в ваших руках! А я тем временем перейду к ветвлению.

Ветвление

До сего момента мы оставляли фиксации только в одной ветви – master. Теперь немного усложним задачу. Для начала создадим новую ветвь. В окне Git Gui откроем вкладку «Ветвь» и выберем пункт «Создать…».




image014

В окне «Создание ветви» задаем новой ветви название (1.). Я написал other. Просто other, хотя в реальных проектах рекомендуется выбирать такие названия, которые будут отражать назначение ветви. Но для тренировки и так сойдет.

Затем нужно выбрать ветвь (2.), из которой будет «расти» новая. Т.к. из готовых ветвей у нас имеется только одна – master – все оставляем как есть. Здесь нужно понимать, что other возьмет свое начало от последнего коммита master, и этот коммит будет у них общий. Чтобы создать ветвь, жмем «Создать» (3.). Теперь можно заметить, что в верхней части окна Git Gui написано «Текущая ветвь: other».

Давайте внесем какие-нибудь изменения в рабочую папку. Например, создадим новую папку с названием media и закинем новый текстовый файл с именем song.txt и текстом:

Holy Diver

You’ve been down too long in the midnight sea

Oh what’s becoming of me

 

Ride the tiger

You can see his stripes but you know he’s clean

Oh don’t you see what I mean

После этого внесем изменения в файл test_file.txt. Я сотру в нем все, что  там есть и запишу одну строчку: This new state of the universe!

Теперь самое время зафиксировать изменения. Какие файлы я создал, какие изменения внес, и какой комментарий написал к фиксации, вы можете видеть на скриншоте:

image015

После сохранения коммита откройте утилиту gitk (напомню: «Репозиторий → Показать историю всех ветвей»). На данной стадии проекта, отображение дерева не слишком наглядно, но все же мы попробуем в нем разобраться.

image016

В области 4. видим, отметку со словом other – это и есть первый коммит нашей новой ветви, предком которого является последний коммит ветви master (5.). Как вы уже поняли, в зеленые рамочки заключены названия ветвей. Желтой точкой обозначен коммит, которому соответствует текущее состояние проекта (т.е., фактически, тот набор файлов, который вы можете наблюдать через проводник). Область 6. cодержит список файлов, претерпевших изменения в данной фиксации.

Используя это окно, можно изменить активную ветвь. Для этого кликните ПКМ по слову master (1.) и выберете «Перейти на эту ветвь». Теперь, открыв рабочую папку через проводник, вы можете видеть, что папка media исчезла, а содержимое файла test_file.txt вернулось к первоначальному состоянию.

Но не нужно думать, что этим действием мы откатились назад. Это вовсе не так! Мы просто переключились на другую ветвь, встали на альтернативный путь развития проекта, если угодно. Теперь мы имеем две актуальные версии нашего проекта: один – последний коммит ветви master, другой – последний коммит ветви other.

При разработке проекта в одиночку ветвление редко используется. Его потенциал раскрывается в полной мере только при коллективном кодинге, как я писал ранее.

Потренируйтесь переключаться между ветвями и понаблюдайте за изменениями в проекте. Кстати, переходить с ветви на ветвь можно прямо из проводника, достаточно лишь вызвать контекстное меню в рабочей папке и выбрать нужную ветвь в пункте «Git Branch».

image017

ПРОДОЛЖЕНИЕ

Автор

MatrixDeity

MatrixDeity

Хреновый модератор

Буду благодарен, если поделитесь:
SFML вопросы, прошу, задавайте на форуме.

Добавить комментарий