Для работы с кодом Android необходимо использовать Git (систему контроля версий с открытым исходным кодом) и Repo (инструмент управления репозиториями, созданный Google и работающий поверх Git). См. Инструменты управления версиями для объяснения взаимосвязи между Repo и Git и ссылками на сопроводительную документацию для каждого инструмента.
Поток
Разработка Android включает в себя следующий базовый рабочий процесс:
- Создайте новую ветку темы, используя
repo start
. - Отредактируйте файлы.
- Изменения стадий с помощью
git add
. - Зафиксируйте изменения с помощью
git commit
. - Загрузите изменения на сервер проверки, используя
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
возвращает конфликты синхронизации:
- Просмотрите файлы, которые не были объединены (код состояния = U).
- При необходимости отредактируйте конфликтные регионы.
- Перейдите в соответствующий каталог проекта. Добавьте и зафиксируйте затронутые файлы, затем перебазируйте изменения:
git add .
git commit
git rebase --continue
- После завершения перебазирования снова запустите всю синхронизацию:
repo sync PROJECT0 PROJECT1 ... PROJECTN
Уборка клиентов
После слияния изменений в Gerrit обновите локальный рабочий каталог, а затем используйте repo prune
чтобы безопасно удалить устаревшие ветки тем:
repo sync
repo prune
Удаление клиентов
Поскольку вся информация о состоянии хранится в вашем клиенте, вам нужно только удалить каталог из вашей файловой системы:
rm -rf WORKING_DIRECTORY
При удалении клиента безвозвратно удаляются все изменения, которые вы не загрузили на проверку.