Разделы портала

Онлайн-тренинги

.
Введение в Git
11.12.2019 00:00

Автор: Кристин Джеквони (Kristin Jackvony)
Оригинал статьи
Перевод: Ольга Алифанова

Для тестировщика, который только начал создавать тест-автоматизацию, использование системы контроля версий вроде Git может показаться опасным и запутанным. Однако способность получить свежайший код, обновить его и создать запрос на включение кода – это очень важно для любого командного проекта? Сегодня я расскажу об основах Git.


Что такое Git?

Git – это система контроля версий. Система контроля версий – это система, позволяющая группе людей совместно работать над кодом, не рискуя случайно перезаписать чужую работу. Она также позволяет группе отслеживать, кто менял код и когда это произошло, и поэтому можно легко докопаться до источника проблемы.

Зачем нужен Git?

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

Можно легко увидеть, что для программного кода это недопустимо! В системе контроля версий есть одна "мастер-версия" – одобренная версия кода. Эта мастер-версия живет в GitHub (или другом сервисе контроля версий), и может быть "получена" любым пользователем. Если кто-то хочет внести изменения в код, они "вытягивают" мастер-версию кода, создают "ветку" – копию мастер-версии, вносят изменения в ветку, пушат ветку назад на GitHub, а затем создают запрос на включение кода – просьбу к кому-то провести ревью кода и слить его с веткой мастера.

Запутались? Не волнуйтесь, на примере все станет намного понятнее. Предположим, что у нас есть репозиторий исходного кода по имени "Гостевая книга думающего тестировщика". Давайте посмотрим, что произойдет, если Прюнелла Прюнвип хочет добавить свое имя в гостевую книгу.

Инструкции предполагают, что Прюнелла уже установила Git на свою машину, и создала учетную запись в GitHub.


Шаг первый: Прюнелла клонирует репозиторий исходного кода

Это часто называется "клонированием репозитория" или "выкачкой репозитория". Прюнелла делает это, переходя по URL в GitHub с исходным кодом, и нажимая на зеленую кнопку " Clone or download". Появляется выпадающее меню с URL, необходимым для клонирования кода. Она нажимает маленькую кнопку буфера обмена справа от URL, чтобы копировать его.

Затем Прюнелла открывает командную строку и переходит в папку, куда планирует положить исходный код. Оказавшись там, она вводит команду git clone и вставляет URL после этой команды. Репозиторий копируется из GitHub в новую папку.

Теперь, когда репозиторий находится в папке на ее машине, она может открыть эту папку в диспетчере файлов и посмотреть, что в ней находится. Она видит единственный текстовый файл "guestBook.txt". В нем написано следующее:

"Кристин Джеквони была здесь 11 мая 2019 года".

Шаг второй: Прюнелла создает новую ветку и добавляет в нее свои изменения

Прежде чем вносить какие-либо изменения в guestBook.txt, Прюнелла должна создать новую ветку и переключиться на нее. В командной строке она переходит в новую папку, клонированную ранее, вводя

cd ThinkingTesterGuestBook.

Она может проверить, что она в мастер-ветке, введя команду git status – она получит ответ вроде этого:

On branch master.

Теперь она может создать новую ветку и переключиться на нее, вводя git checkout -b NewEntry. Команда "-b" говорит Git, что нужно создать новую ветку. "NewEntry" – это имя ветки, выбранное Прюнеллой. А команда checkout заставляет Git переключиться на новую ветку.

Если на этом этапе Прюнелла введет git status, она получит ответ "On branch NewEntry".

Теперь, когда Прюнелла находится в правильной ветке, она внесет изменения в файл guestBook.txt, добавив в него одну строчку. Теперь он выглядит так:

"Кристин Джеквони была здесь 11 мая 2019 года.

Прюнелла Прюнвип была здесь 13 мая 2019 года".

Шаг 3: Прюнелла коммитит свои изменения и пушит их в GitHub

Теперь, когда Прюнелла внесла нужные изменения, ей нужно закоммитить и запушить его. Для начала она может прогнать git status, получая следующий ответ:

On branch NewEntry

modified: guestBook.txt

Он говорит о том, что файл guestBook.txt был изменен. Затем Прюнелле нужно добавить файл в коммит, введя git add guestBook.txt. Теперь, если она введет git status, она увидит ответ:

On branch NewEntry

Changes to be committed:

modified: guestBook.txt

Затем Прюнелла коммитит свое изменения, вводя git commit -m "Adding a new entry". –m в этой команде означает "message", сообщение. Текст "Adding a new entry" – это сообщение, которое она добавляет, чтобы объяснить, что именно она коммитит. Командная строка ответит количеством файлов и строчек, которые были изменены.

Как только изменение закоммичено, Прюнелла может пушить его в репозиторий GitHub, вводя git push origin NewEntry. Значение NewEntry поясняет, что код должен попасть в ветку NewEntry, которая еще не существует в репозитории – по этой команде она будет создана. Origin относится к репозиторию GitHub (его также называют "удаленным"). Командная строка ответит несколькими строчками, последней из которых будет

* [new branch] NewEntry -> NewEntry

Эта строка показывает, что в оригинальном репозитории создана новая ветка NewEntry, скопированная с локальной ветки, созданной Прюнеллой, которая тоже называется NewEntry.

Шаг 4: Прюнелла создает запрос на включение кода (пулл-реквест) в GitHub

Теперь, когда новая ветка попала в GitHub, Прюнелла может создать пулл-запрос, чтобы попросить о слиянии своих изменений с мастер-веткой. Она делает это, перейдя в репозиторий GitHub и кликнув на кнопку "New Pull Request". Это перемещает ее на страницу "Compare". Она убеждается, что в левой части сравнения находится мастер-ветка, а затем выбирает ветку NewEntry из выпадающего меню. Она может видеть, как изменился файл guestBook.txt – новая добавленная строчка подсвечена зеленым, демонстрируя разницу между двумя файлами (если бы она что-то удалила, удаленная строка подсвечивалась бы красным). И, наконец, она нажимает на кнопку "Create Pull Request".

Шаг 5. Пулл-реквест Прюнеллы одобрен и объединен

Финальный шаг в процессе изменения файлов – это ревью изменения, его одобрение и слияние, которое проводит хозяин репозитория или члены команды, имеющие права на одобрение пулл-реквеста. Теперь, если Прюнелла переключится на мастер-ветку, введя git checkout master, выкачает изменения (git pull origin master) и посмотрит на файл guestBook.txt, она увидит, что в него добавлена новая запись:

"Кристин Джеквони была здесь 11 мая 2019 года.

Прюнелла Прюнвип была здесь 13 мая 2019 года".

Вот и все! В следующий раз я расскажу о полезных для Git штуках и фокусах, но этих шагов должно быть достаточно для коммита вашего собственного кода в репозиторий команды.

Обсудить в форуме