Git Мастерство: Понимание удаленных и отслеживающих веток
13:19, 04.12.2023
Изучение удаленных веток
Ветки Git - это изолированные и безопасные части разработок, отделенные от основного проекта. Ветки используются для исправления ошибок, создания новых возможностей, тестирования идей и минимизации рисков разрушения существующего кода программы.
Удаленные ветки помогают пользователям конкретного проекта осуществлять совместную работу. Эти ветки размещаются на GitHub, который чаще всего называют исходным репозиторием. Когда пользователь вносит некоторые локальные изменения, можно переместить эту созданную локальную ветку в исходный или удаленный репозиторий. Тем самым вы предоставляете другим пользователям доступ к этому конкретному коду.
Таким образом, удаленные ветки - это копии локальных веток, находящиеся в удаленных репозиториях.
Создание нового локального репозитория
Для практического понимания того, как все работает на самом деле, давайте создадим локальный репозиторий. Для этого начнем с создания нового каталога и поместим в него несколько файлов, после чего выполним команду $ git init. Эта команда делает конкретные файлы неотслеживаемыми, и чтобы проверить это, можно выполнить команду - $ git status. Для добавления любых других файлов можно выполнить команду - $ git commit -m. Таким образом, локальный репозиторий с парой файлов успешно создан, поэтому перейдем к удаленному репозиторию.
Создание нового удаленного репозитория
Для создания удаленного репозитория необходимо сначала выбрать нужный сервис. Наиболее популярными вариантами являются Bitbucket и GitHub. Выбрав сервис и настроив все необходимое, можно переходить к следующим шагам.
Добавление изменений в удаленный репозиторий
После настройки удаленного репозитория необходимо вставить ссылку на него в локальный репозиторий. Для этого необходимо набрать:
$ git remote add something [remote-url]
Как видите, мы назвали удаленный репозиторий something, но это может быть любое другое слово, которое вам нравится. Чтобы проверить, все ли успешно подключилось, выполните команду:
$ git remote
Чтобы получить более подробную информацию об удаленном хранилище, необходимо добавить -v к команде, указанной выше.
На следующем этапе необходимо выполнить push в удаленный репозиторий с помощью следующей команды:
$ git push something master
При вводе этой команды на удаленном репозитории будет создана ветка master, а на локальном репозитории - ссылка. Если вы выполняете push в удаленное хранилище, но не создали ветку, то это будет сделано автоматически. Автоматически сгенерированное имя содержит следующую информацию remotes/remote-name/branch-name, в нашей ситуации это remotes/something/master.
Проверка удаленных веток
Для проверки всех удаленных веток можно выполнить команду $ git branch -r. Для просмотра всех существующих веток, включая локальные и удаленные, необходимо выполнить команду:
$ git branch -a
При первой проверке, как правило, главная ветка и начальная удаленная ветка будут идентичны. Однако при добавлении в проект других пользователей эта ветка на определенном этапе также будет обновлена.
Переход к удаленным веткам
Переход на удаленные ветки осуществляется очень просто, достаточно набрать:
$ git checkout origin/master
Как видите, вставлять remotes/ в эту строку не нужно. Удобство заключается в том, что это локальная операция, которая возможна благодаря точной копии удалённой главной ветки.
Поддержка удаленных веток в актуальном состоянии
Для отправки локальных изменений в удаленный репозиторий выполните следующую команду:
$ git push
Перед выполнением команды push настоятельно рекомендуется выполнить команду $ git fetch. Нет необходимости начинать с fetch, если вы создали новую ветку. Поскольку этой ветки не было в удаленном хранилище, то и “хватать” (fetch) нечего.
Для синхронизации необходимо набрать следующую команду:
$ git fetch [remote-name]
В результате синхронизации все удаленные ветки будут скопированы в локальный репозиторий. Если такие ветки есть в локальном хранилище, то они будут обновлены.
Необходимость выполнения 'Fetch' перед 'Push'
'Fetch' должна выполняться перед загрузкой новых изменений в удаленную репозицию. Это очень важный момент, о котором следует помнить перед любыми плановыми изменениями. Если другой пользователь выложил что-то в удаленный репозиторий, то необходимо “схватить” (fetch) изменения, а затем “соединить” (merge) их с локальными ветками. Только после этого можно начинать "продвигать" (push) свои изменения. Пользователи практически не могут ничего продвигать, пока не обновится локальная ветка.
Процесс “схватывания” одинаково необходим как для главной ветки, так и для любых других веток. Помните, что если вы не планируете вносить конкретные изменения в ветку, то вы можете не обновлять ее. Эти обновления важны только в том случае, если вы инициируете изменения.
Имитация вклада члена команды
Чтобы смоделировать появление нового участника в проекте, необходимо сначала создать в системе новую папку. Она не должна быть частью данного репозитория или его подпапки. После этого клонируйте репозиторий, выполнив следующую команду:
$ git clone [remote-url]
Далее необходимо выполнить еще несколько шагов, указав на новое хранилище, зафиксировав и продвинув его с помощью следующей командной строки:
$ git add
$ git commit -m
$ git push something master
Создание веток отслеживания
Ветки отслеживания - это типы локальных веток, которые непосредственно связаны с удаленными. Полезность веток отслеживания заключается в автоматическом определении веток и сервера, используемого для продвижения.
Этот тип ветки похож на другие, но содержит специфические данные для отслеживания.
Обычный сценарий git push выглядит следующим образом: $ git push something master. Это означает, что удалённый репозиторий, который называется something, и ветка, которая называется master, получают обновление. Если в удаленном репозитории уже создана такая ветка, то все работает безупречно, но в противном случае ничего не работает. Чтобы упростить этот процесс, мы можем использовать ветки отслеживания.
Создание новых веток отслеживания
Чтобы проиллюстрировать, как выглядит весь процесс создания веток отслеживания, сделаем ее из локальной главной ветки. Для создания этой ветки - удаленной главной ветки отслеживания - используется следующая команда:
$ git push -u something master
Как видите, все очень просто и нет никаких сложных шагов в управлении этим процессом. Если вы не вносите никаких локальных изменений, Git вернет сообщение о том, что все отслеживается из исходного источника.
После выполнения этой команды процесс становится намного проще. Вы просто печатаете $ git push или pull и делаете все, что хотите, без необходимости добавлять имя ветки и удаленное имя каждый раз, когда хотите что-то извлечь (pull) или продвинуть (push). Командная строка для pull выглядит так:
$ git pull
Создание новой ветки также очень просто - достаточно добавить в строку параметр -u, и это выглядит следующим образом:
$ git push -u remote-name branch-name
Нет необходимости делать это во время первоначальной отправки на удаленное хранилище. Вы можете откорректировать эту настройку, когда это потребуется.
Дополнительные преимущества использования веток отслеживания
Ветки отслеживания весьма полезны для продвижения и извлечения в более короткой версии. Кроме того, пользователи могут легко определить, отстают они или опережают по сравнению с удаленной веткой. Для проверки этой информации необходимо выполнить следующую команду:
$ git status
Если у вас обычная ветка, то информация об обновлении будет доступна не так быстро. При использовании ветки отслеживания вы сразу же получите результат. Таким образом, вы сможете определить, есть ли необходимость извлекать новые изменения или продвигать свои модификации в проект.
Если вы использовали эту команду и видите результат - ветка обновлена, то вам нужно сделать еще один шаг. Здесь есть одна хитрость: если другой пользователь обновит удаленный репозиторий, вы все равно получите уведомление о том, что все обновлено. Это происходит потому, что система проверяет локальную удаленную ветку, но не удаленный репозиторий. Чтобы получить достоверный результат, необходимо использовать команду fetch, а затем еще раз команду status. Таким образом, здесь вы увидите, что ветка отстает.
Автоматическое получение веток отслеживания при клонировании
Клонирование имеет множество автоматических функций, и нет необходимости в расширенной настройке. Когда пользователь клонирует репозиторий, на новом репозитории создаются удаленные ветки, аналогичные тем, что были созданы на удаленном репозитории. К тому же, главная ветка создается по умолчанию.
Кроме этого, в клонированном репозитории также настраивается локальная ветка для отслеживания удаленной ветки. Это очень удобно, и некоторые пользователи даже не замечают этих возможностей. Они просто используют ветки отслеживания и не беспокоятся об их создании и т.п.
Конечно, существует множество автоматических сценариев, и это замечательно, но как насчет других вещей, которые не генерируются по умолчанию? Давайте создадим реальную проблему, которая может возникнуть у любого нового пользователя, и попробуем решить ее наиболее эффективным способом.
Например, один из членов команды клонировал репозиторий с несколькими ветками. Проблема в том, что система автоматически создает только удаленные ветки и локальные главные ветки. Остальные локальные ветки должны создаваться пользователем самостоятельно, как же это сделать? Если пользователю нужен локальный доступ к конкретной ветке, то ее нужно клонировать из удаленной в локальную. Еще один важный момент - добавление механизма отслеживания этой клонированной ветки. Звучит как 2 сложные задачи, но на самом деле это всего одна строка:
$ git checkout -b [local-branch-name] [remote-name/branch-name]
На выходе вы увидите уведомление о том, что выбранная ветка настроена на отслеживание удалённой.
Заключительные мысли по освоению Git
Теперь вы имеете базовое представление об удаленных и отслеживаемых ветках, о том, как инициировать локальный репозиторий, о нескольких полезных командах, таких как pull, push, clone, fetch, и некоторых других. Вся эта информация может быть немного запутанной для новых пользователей, и это ожидаемо. Внедрение любой новой технологии - дело непростое, требующее не только базовых знаний, но и огромной практики. Только на практике можно стать более опытным в работе с Git и огромным списком команд, с которыми вы познакомитесь. Отличная рекомендация для любого новичка - попрактиковаться с командами, ветками, создать пару репозиториев, и все станет более понятным.
Git - это не только выполнение команд и постоянное обучение, но и исследование и тестирование лучших стратегий для конкретного проекта. Чем больше экспериментов вы проведете, тем легче вам будет в конечном итоге. Не теряйте времени и приступайте к небольшим проектам прямо сейчас!
FAQ
Что означает концепт отслеживания связей в Git?
Отслеживающие связи или ветки отслеживания созданы как концепт для автоматизации нескольких процессов в Git. Эта отслеживающая ветка соединяет локальную ветку с удалённой, чтобы было проще выполнять push/pull. Ветка отслеживания автоматически знает, какую ветку и раздел выбрать для целей push и pull, и вам не нужно набирать все вручную.
В чем важность установления отслеживания?
Важность процесса отслеживания заключается в автоматизации и упрощении нескольких основных процессов в Git. Теперь пользователям не нужно добавлять информацию о сервере и конкретной ветке каждый раз, когда они выполняют push или pull. С помощью одной команды можно упростить этот процесс и исключить дополнительную информацию из следующего процесса.
Какова процедура мониторинга удаленной ветки?
Процедура мониторинга удаленной ветки важна для совместной работы пользователей над одним и тем же проектом. Такие инструменты, как Git, изначально создавались для налаживания совместной работы и помощи программистам в отслеживании всех имеющихся изменений в проекте. Все различные функции и версии можно легко отследить с помощью всего нескольких команд, о которых вы должны знать. Например, для создания/удаления/перечисления веток можно использовать следующую команду - git branch. Git fetch применяется для получения ссылок из удаленного репозитория и сохранения их в локальном. Другой полезной командой для перемещения между функциями в одном репозитории является git checkout.