Рабочий процесс системы управления версиями

Для работы с кодом Android необходимы Git — система контроля версий с открытым исходным кодом, и Repo — инструмент управления репозиториями, разработанный Google и работающий поверх Git. Объяснение взаимосвязи между Repo и Git, а также ссылки на документацию по каждому инструменту см. в разделе «Инструменты контроля версий» .

Поток

Разработка под Android включает в себя следующий базовый рабочий процесс:

  1. Создайте новую ветку темы с помощью repo start .
  2. Отредактируйте файлы.
  3. Изменения этапа с помощью git add .
  4. Зафиксируйте изменения с помощью git commit .
  5. Загрузите изменения на сервер проверки с помощью repo upload .

Задачи

Работа с Git и Repo в репозиториях кода Android включает в себя выполнение следующих распространенных задач.

Командование Описание
repo init Инициализирует нового клиента.
repo sync Синхронизирует клиент с репозиториями.
repo start Создаёт новую ветку.
repo status Отображает статус текущей ветки.
repo upload Загружает изменения на сервер проверки.
git add Подготавливает файлы к отправке.
git commit Подтверждает добавление файлов в подготовленный файл.
git branch Отображает текущие ветки.
git branch [branch] Создает новую ветку темы.
git checkout [branch] Переключает HEAD на указанную ветку.
git merge [branch] Объединяет [branch] с текущей веткой.
git diff Показывает разницу между незафиксированными изменениями.
git diff --cached Показывает разницу между поэтапными изменениями.
git log Отображает историю текущего филиала.
git log m/[codeline].. Отображает коммиты, которые не были отправлены в репозиторий.

Для получения информации об использовании Repo для загрузки исходного кода см. разделы «Загрузка исходного кода» и « Справочник команд Repo» .

Синхронизация клиентов

Для синхронизации файлов всех доступных проектов:

repo sync

Для синхронизации файлов по выбранным проектам:

repo sync PROJECT0 PROJECT1 ... PROJECTN

Создание тематических ветвей

Создавайте отдельную ветку в локальной рабочей среде всякий раз, когда начинаете вносить изменения, например, при работе над ошибкой или новой функцией. Ветка не является копией исходных файлов; это указатель на конкретный коммит, что делает создание локальных веток и переключение между ними очень простой операцией. Используя ветки, вы можете изолировать один аспект своей работы от других. Интересную статью об использовании веток можно найти по ссылке: Разделение веток .

Чтобы создать тематическую ветку с помощью Repo, перейдите в проект и выполните следующую команду:

repo start BRANCH_NAME .

Точка в конце строки ( . ) обозначает проект в текущем рабочем каталоге.

Чтобы убедиться, что новая ветка создана:

repo status .

Использование тематических ветвей

Чтобы присвоить ветку конкретному проекту:

repo start BRANCH_NAME PROJECT_NAME

Список всех проектов можно найти на сайте android.googlesource.com . Если вы уже перешли в каталог проекта, просто поставьте точку, чтобы обозначить текущий проект.

Чтобы переключиться на другую ветку в вашей локальной рабочей среде:

git checkout BRANCH_NAME

Чтобы просмотреть список действующих филиалов:

git branch

или

repo branches

Обе команды возвращают список существующих ветвей, при этом название текущей ветви предваряется звездочкой (*).

Файлы для подготовки

По умолчанию Git замечает, но не отслеживает изменения, которые вы вносите в проект. Чтобы указать Git сохранить ваши изменения, необходимо пометить или добавить эти изменения в индекс для включения в коммит.

Для проведения репетиций:

git add

Эта команда принимает аргументы для файлов или каталогов внутри каталога проекта. Несмотря на название, git add не только добавляет файлы в репозиторий Git; её также можно использовать для добавления изменений и удалений файлов в индекс.

Просмотр состояния клиента

Чтобы вывести список состояний файлов:

repo status

Чтобы просмотреть незафиксированные изменения (локальные изменения, не помеченные для фиксации):

repo diff

Чтобы просмотреть зафиксированные изменения (найденные изменения, помеченные для фиксации), убедитесь, что вы находитесь в каталоге проекта, а затем запустите git diff с аргументом cached :

cd ~/WORKING_DIRECTORY/PROJECT
git diff --cached

Внесение изменений

Коммит — это основная единица системы контроля версий в Git, представляющая собой снимок структуры каталогов и содержимого файлов всего проекта. Для создания коммита в Git используйте следующую команду:

git commit

При запросе сообщения о фиксации изменений, укажите короткое (но полезное) сообщение для изменений, отправленных в AOSP. Если вы не добавите сообщение о фиксации, фиксация завершится неудачей.

Загрузка изменений в Gerrit

Обновите систему до последней версии, затем загрузите изменения:

repo sync
repo upload

Эти команды возвращают список зафиксированных вами изменений и предлагают выбрать ветки для загрузки на сервер проверки. Если доступна только одна ветка, вы увидите простой запрос y/n .

Разрешение конфликтов синхронизации

Если команда repo sync возвращает сообщение о конфликтах синхронизации:

  1. Просмотрите файлы, которые не были объединены (код состояния = U).
  2. При необходимости отредактируйте регионы конфликта.
  3. Перейдите в соответствующий каталог проекта. Добавьте и зафиксируйте затронутые файлы, затем выполните перебазирование изменений:
    git add .
    git commit
    git rebase --continue
    
  4. После завершения операции перебазирования запустите синхронизацию заново:
    repo sync PROJECT0 PROJECT1 ... PROJECTN
    

Уборка клиентов

После слияния изменений в Gerrit обновите локальный рабочий каталог, затем используйте repo prune чтобы безопасно удалить устаревшие тематические ветки:

repo sync
repo prune

Удаление клиентов

Поскольку вся информация о состоянии хранится в вашем клиенте, вам нужно всего лишь удалить каталог из файловой системы:

rm -rf WORKING_DIRECTORY

Удаление клиента навсегда удаляет все изменения, которые вы не загрузили для проверки.