Software Cats - Блог
Тестирование

Часть 4. Автотесты для сайта на Java с нуля. Git: Коммиты, ветвление, мерж.

Краткая справка по Git_

Чаще всего над программным продуктом работает не один человек: кто-то пишет один модуль, еще кто-то другой, тесты могут писать совсем другие люди, не те, кто пишет основной код и т.д.. Чтобы хранить код удаленно и совместно работать над ним используются специальные сервисы, например GitHub или GitLab.

Одна из главных функций в этих сервисах - отслеживать изменения в файлах.

"Под капотом" у них - специальная утилита - Git  - для отслеживания истории изменения файлов. С помощью Git вы можете откатить проект до более старой версии, сравнивать изменения в версиях проекта, объединить все изменения и тд.

Хранилище вашего кода/файлов (и истории его изменений). называют репозиторием.

Репозитории могут быть локальными - по сути, любая папка на жестком диске может быть репозиторием, и удаленными (внешними) - это версии вашего проекта, сохраненные на удаленном сервере.

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

Папка, в которой хранится наш проект, автоматически не станет репозиторием. Нужно инициализировать репозиторий т.е. сообщить Git’у, что изменения в файлах, которые хранятся в этой папке, нужно отслеживать.

Для этого нужно перейти в папку проекта, правой кнопкой мыши открыть меню и запустить Git.


Откроется командная строка в которой нужно ввести и запустить команду git init. После чего Git сообщит, что репозиторий инициализирован.


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

В Git есть несколько статусов файлов:
Untracked - файл, который Git пока не “видит” т.е. не отслеживает.
Unmodified - файл, который Git уже видит, но файл еще не изменялся.
Modified - это файл, в который вносились изменения (сам файл отслеживается Git’ом, но изменения пока не зафиксированы).
Staged - это файл, добавленный в индекс т.е. готовый к коммиту (сохранению) .
Как только файл будет закоммичен т.е. все изменения зафиксированы Git’ом, он снова переходит в статус unmodified.

Когда в инициализированном репозитории появляется новый файл, он автоматически попадает в состояние untracked, файл можно изменять, но Git не будет учитывать изменения. Чтобы Git “увидел” файл, его нужно добавить в индекс и тогда файл перейдет в состояние Staged.

Чтобы узнать какие файлы в каком состоянии находятся используется команда git status.


Видим, что Git показывает список не закоммиченых файлов и предлагает добавить файлы в индекс, с помощью команды git add название_файла. Можно добавить все файлы сразу, с помощью команды git add --all.
Выполняем команду. Теперь видно, что все файлы в репозитории готовы к коммиту.


Чтобы сохранить изменения в файле т.е. закоммитить файл, нужно дать Git команду git commit c ключом -m (англ. message), после ключа обычно указывают комментарий, в котором указывают, что именно изменилось в файле: git commit -m "My first commit".


Чтобы посмотреть список коммитов используется команда git log.

Как найти нужный коммит в истории, как посмотреть его, как откатить проект до определенной версии и многое другое можно изучить, воспользовавшись официальной документацией  Git https://git-scm.com/doc.

Ветвление_

Еще одна важная функция git, которая нам понадобится - это ветвление. Ветвление - это параллельная разработка по нескольким линиям т.е. разделение версий проекта и работа над ними по отдельности.

Когда репозиторий инициализируется командой git init, автоматически создается основная ветка. Обычно она автоматически называется master (иногда main) и в ней находится основная стабильная версия проекта.

Командой git branch можно посмотреть в какой ветке ты сейчас находишься.
Чтобы не испортить в процессе разработки тестов основную ветку, создают вторую ветку и работают уже с ней, назвать ее можно как угодно. Чтобы создать ветку используют команду git branch название_ветки.


Однако, после создания новой ветки, мы все еще находимся в основной ветке проекта. Чтобы переключится на вновь созданную ветку (или на любую другую) используется команда git checkout название_ветки. Либо используют ключ -b, чтобы переключится на ветку сразу после ее создания git checkout -b название_ветки.


Мерж_

Чтобы слить (мёрджить, от англ merge - слияние) ветки между собой используется команда git merge [название ветки, которую присоединяют к текущей].
В разных компаниях по разному принято мержить в основную (master) ветку в удаленном репозитории проекта. Кто-то делает это самостоятельно, а где-то этим занимается ведущий тестировщик/разработчик только после ревью написанного кода. Но про это немного позже. А подробнее про merge, а так же про разрешение конфликтов, которые могут возникать в процессе слияния веток, можно почитать в документации git.