Фиксации
Теперь займемся наполнением нашего хранилища. Сейчас рабочая папка (у меня это MyTestProject) не содержит ничего кроме .git. Это значит, что репозиторий пуст. Чтобы исправить это, давайте создадим в нем текстовый файл (например, с именем test_file.txt) и заполним его каким-нибудь текстом.
Примечание: Git не хранит пустые папки, только те, которые содержат какие-либо файлы!
Теперь наша рабочая папка не пуста – она содержит файл – и мы хотим, чтобы в нашем репозитории сохранилось текущее состояние проекта. Чтобы создать коммит развернем Git Gui и нажмем «Перечитать» (1.), т.е. обновить. В поле «Изменено (не будет сохранено)» появится наш свежесозданный файл. Кликнув по нему (2.), мы сможем просмотреть его содержимое в поле 3..
Тот факт, что поле «Изменено…» содержит наш файл, означает, что Git заметил, что в нем произошли изменения, и теперь система сообщает нам об этом.
Прежде чем создать фиксацию, нам необходимо сообщить Git, какие из изменений должны быть учтены. Для этого кликнем на иконку листа бумаги рядом с названием файла (2.) и замечаем, что файл перекочевал в список «Подготовлено (будет сохранено)» (4.). Это значит, что он был проиндексирован. Тот же результат можно было получить, нажав «Подготовить все» (5.); в этом случае все файлы, в которых были изменения, будут проиндексированы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Проверить статус файлов репозитория через консоль можно командой git status После этого Git отобразит все новые файлы каталога, при этом файлы отмеченные красным цветом, НЕ проиндексированы, а зеленым – проиндексированы. Чтобы проиндексировать все измененные файлы рабочего каталога, выполните команду git add --all Чтобы проиндексировать только один файл, следует указать его имя после команды add. Для нашего случая это будет выглядеть так: Git add “test_file.txt” |
Теперь мы готовы создать свой первый коммит. Но сперва необходимо заполнить поле комментария (6.) для нашего нового коммита. Это описание, которое будет отображаться напротив нашего коммита в дереве проекта. Принято в первой строчке комментария указывать назначение изменений, а во второй – все изменения, которые были произведены (см. рисунок). Это делается для того, чтобы каждый, кто захочет посмотреть дерево проекта, мог сразу понять, какие новшества вносит каждый коммит в проект.
Переключатель «Новое состояние» показывает, что будет создана новая фиксация. Другое положение переключателя исправит предыдущий коммит на текущий, т.е. перезапишет его.
По окончании заполнения поля комментария следует нажать кнопку «Сохранить» (7.). Все! Теперь наш коммит создан! Взглянем на него, перейдя «Репозиторий» и потом «Показать историю всех ветвей».
В появившемся окне (утилита gitk) мы можем видеть схематическое отображение дерева проекта (8.), состоящее пока только из одного коммита с нашим комментарием. Справа расположены имя человека, оставившего этот коммит, и дата размещения. В области 9. расположен уникальный идентификатор коммита, состоящий из двадцати шестнадцатеричных цифр. Поле 10. содержит полную информацию о коммите: имя автора, его электронную почту, дату сохранения, ветвь, подробный комментарий, а также все изменения, внесенные в каждый из файлов. Строка, выделенная зеленым, означает, что этот текст был добавлен в файл test_file.txt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Для добавления коммита выполните git commit -m “текст_комментария” Также можно использовать и другие параметры. Чтобы узнать все возможные параметры любой команды, введите git help команда Например, git help commit После этого в вашем браузере по умолчанию откроется страница с подробной справкой. |
Вдоволь налюбовавшись новым коммитом, мы решаем создать еще один. Для этого измените содержание файла test_file.txt на то, которое понравится вам. Затем снова добавьте файл в список подготовленных, напишите комментарий к новому состоянию и создайте второй коммит – все по аналогии с первым коммитом. Сделайте это самостоятельно. И я тоже сделаю.
Когда задание будет выполнено, снова откройте gitk и посмотрите, что у вас вышло. У меня, например, вот это:
Здесь видно, что дерево немного «выросло» – ровно на один коммит. В окне описания изменений появилось две новых зеленых строки (именно их я добавил в test_file.txt), а строка Just small text for our test. стала красной, потому что ее я удалил из файла.
1 2 3 4 5 6 7 8 9 10 11 |
Можно открыть gitk из консоли, выполнив gitk или просмотреть историю всех коммитов, выполненную в виде псевдографики, прямо в окне консоли: git log --graph Прокрутка графа вниз осуществляется клавишей ‘Enter’; вернуться к вводу команд можно, нажав клавишу ‘q’. |
Потренируйтесь создавать коммиты в своей «песочнице» (если вы прислушались к моему совету и создали ее). Размещайте новые файлы в новые папки, меняйте старые, перемещайте файлы с места на место (в пределах папки с репозиторием), можете даже закинуть какой-нибудь source-файл – все в ваших руках! А я тем временем перейду к ветвлению.
Ветвление
До сего момента мы оставляли фиксации только в одной ветви – master. Теперь немного усложним задачу. Для начала создадим новую ветвь. В окне Git Gui откроем вкладку «Ветвь» и выберем пункт «Создать…».
В окне «Создание ветви» задаем новой ветви название (1.). Я написал other. Просто other, хотя в реальных проектах рекомендуется выбирать такие названия, которые будут отражать назначение ветви. Но для тренировки и так сойдет.
Затем нужно выбрать ветвь (2.), из которой будет «расти» новая. Т.к. из готовых ветвей у нас имеется только одна – master – все оставляем как есть. Здесь нужно понимать, что other возьмет свое начало от последнего коммита master, и этот коммит будет у них общий. Чтобы создать ветвь, жмем «Создать» (3.). Теперь можно заметить, что в верхней части окна Git Gui написано «Текущая ветвь: other».
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Консольная команда, отвечающая за создание новой ветви other, выглядит следующим образом: git branch other А затем переключение на нее осуществляется так: git checkout other Можно оба действия выполнить одной командой, добавив ко второй команде параметр -b: git checkout -b 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!
Теперь самое время зафиксировать изменения. Какие файлы я создал, какие изменения внес, и какой комментарий написал к фиксации, вы можете видеть на скриншоте:
После сохранения коммита откройте утилиту gitk (напомню: «Репозиторий → Показать историю всех ветвей»). На данной стадии проекта, отображение дерева не слишком наглядно, но все же мы попробуем в нем разобраться.
В области 4. видим, отметку со словом other – это и есть первый коммит нашей новой ветви, предком которого является последний коммит ветви master (5.). Как вы уже поняли, в зеленые рамочки заключены названия ветвей. Желтой точкой обозначен коммит, которому соответствует текущее состояние проекта (т.е., фактически, тот набор файлов, который вы можете наблюдать через проводник). Область 6. cодержит список файлов, претерпевших изменения в данной фиксации.
Используя это окно, можно изменить активную ветвь. Для этого кликните ПКМ по слову master (1.) и выберете «Перейти на эту ветвь». Теперь, открыв рабочую папку через проводник, вы можете видеть, что папка media исчезла, а содержимое файла test_file.txt вернулось к первоначальному состоянию.
1 2 3 |
Напомню, переключение между ветвями можно осуществить командой git checkout имя_ветви |
Но не нужно думать, что этим действием мы откатились назад. Это вовсе не так! Мы просто переключились на другую ветвь, встали на альтернативный путь развития проекта, если угодно. Теперь мы имеем две актуальные версии нашего проекта: один – последний коммит ветви master, другой – последний коммит ветви other.
При разработке проекта в одиночку ветвление редко используется. Его потенциал раскрывается в полной мере только при коллективном кодинге, как я писал ранее.
Потренируйтесь переключаться между ветвями и понаблюдайте за изменениями в проекте. Кстати, переходить с ветви на ветвь можно прямо из проводника, достаточно лишь вызвать контекстное меню в рабочей папке и выбрать нужную ветвь в пункте «Git Branch».