Belov Solutions

Сопровождение проекта с Git: Полное руководство

Введение в сопровождение проекта с Git

Помимо эффективного участия в проекте, важно уметь его сопровождать. Сопровождение включает принятие и применение патчей, созданных с помощью git format-patch и отправленных по почте, а также интеграцию изменений из удалённых веток. Независимо от того, поддерживаете ли вы канонический репозиторий или помогаете в проверке патчей, важно знать, как принимать работу так, чтобы это было удобно для всех участников и приемлемо в долгосрочной перспективе. Эти навыки становятся всё более востребованными в распределённых командах.

Работа с тематическими ветками

Перед интеграцией изменений рекомендуется проверять их в тематической ветке — временной ветке, созданной для тестирования. Это позволяет применять патчи по одному, пропуская неработающие, и возвращаться к ним позже. Используйте короткие, понятные названия, например, ruby_client. Сопровождающие часто применяют пространства имён, добавляя префикс, например, sc/ruby_client (где sc — инициалы автора).

Создайте ветку на основе базовой, например:

$ git branch sc/ruby_client master

Для немедленного переключения используйте:

$ git checkout -b sc/ruby_client master

Теперь добавляйте изменения и решайте, стоит ли сливать их в долгосрочные ветки.

Применение патчей, полученных по почте

Полученные по почте патчи требуют анализа в тематической ветке. Есть два основных способа: git apply и git am.

Применение патча командой git apply

Если патч создан с git diff или diff (что не рекомендуется), используйте git apply. Предположим, патч сохранён как /tmp/patch-ruby-client.patch:

$ git apply /tmp/patch-ruby-client.patch

Это изменит файлы в рабочем каталоге, аналогично patch -p1, но с большей строгостью. git apply поддерживает добавления, удаления и переименования из формата git diff, чего patch не делает, и использует модель «всё или ничего». Коммит не создаётся — его нужно сделать вручную.

Проверьте патч перед применением:

$ git apply --check 0001-see-if-this-helps-the-gem.patch
error: patch failed: ticgit.gemspec:1
error: ticgit.gemspec: patch does not apply

Отсутствие ошибок указывает на возможность применения.

Применение патча командой git am

Если патч создан с git format-patch, используйте git am (от «apply mailbox»). Он читает mbox-файл с письмами, например:

From 330090432754092d704da8e76ca5c05c198e71a8 Mon Sep 22 00:00:00 2022
From: Bill Gates 
Date: Sun, 6 Apr 2008 10:17:23 -0700
Subject: [PATCH 1/2] Add limit to log function
Limit log functionality to the first 20

Примените патч:

$ git am 0001-limit-log-function.patch
Applying: Add limit to log function

Коммит создаётся автоматически с данными автора из From и Date, а сообщение — из Subject и тела письма. При конфликте вы получите подсказку:

$ git am 0001-see-if-this-helps-the-gem.patch
Applying: See if this helps the gem
error: patch failed: ticgit.gemspec:1
Patch failed at 0001.
When you have resolved this problem run "git am --resolved".

Исправьте конфликты, добавьте файлы в индекс и выполните:

$ git add ticgit.gemspec
$ git am --resolved

Опция -3 позволяет провести трёхстороннее слияние, если базовый коммит доступен.

Извлечение удалённых веток

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

$ git remote add bill git://github.com/bill/myproject.git
$ git fetch bill
$ git checkout -b rubyclient bill/ruby-client

Для разовых операций используйте git pull с URL:

$ git pull https://github.com/onetimeguy/project

Это сохраняет историю коммитов, что упрощает слияние.

Определение применяемых изменений

Просмотрите коммиты в тематической ветке, не входящие в основную:

$ git log contrib --not master
commit 5b6235bd297351589efc4d73316f0a68d484f118
Author: Mark Zuckerberg 
Date:   Fri Dec 24 19:53:59 2022 -0700
    See if this helps the gem

Для разницы используйте:

$ git diff master...contrib

Интеграция совместной работы

После проверки выберите способ интеграции: слияние, перебазирование или отбор.

Схемы слияния

Простое слияние в master подходит для небольших проектов. Для стабильности используйте двухступенчатый цикл с master и develop, где develop принимает новые изменения, а master — стабильные релизы.

Схема с перебазированием и отбором

Перебазируйте ветку:

$ git rebase master

Или отберите коммит:

$ git cherry-pick e43a6

Дополнительные возможности

Включите rerere для повторного использования разрешений конфликтов:

$ git config --global rerere.enabled true

Пометьте релизы тегами:

$ git tag -s v1.5 -m 'my signed 1.5 tag'

Создайте архив:

$ git archive master --prefix='project/' | gzip > `git describe master`.tar.gz

Сформируйте сводку:

$ git shortlog --no-merges master --not v1.0.1

Заключение

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

Отзывы

Оставить отзыв

Ваша эл. почта не будет опубликована