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

Для работы с кодом 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 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

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