Для работы с кодом 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 для загрузки исходного кода см. разделы «Загрузка исходного кода» и « Справочник команд 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/PROJECTgit diff --cached
Внесение изменений
Коммит — это основная единица системы контроля версий в Git, представляющая собой снимок структуры каталогов и содержимого файлов всего проекта. Для создания коммита в Git используйте следующую команду:
git commit
При запросе сообщения о фиксации изменений, укажите короткое (но полезное) сообщение для изменений, отправленных в AOSP. Если вы не добавите сообщение о фиксации, фиксация завершится неудачей.
Загрузка изменений в Gerrit
Обновите систему до последней версии, затем загрузите изменения:
repo syncrepo upload
Эти команды возвращают список зафиксированных вами изменений и предлагают выбрать ветки для загрузки на сервер проверки. Если доступна только одна ветка, вы увидите простой запрос y/n .
Разрешение конфликтов синхронизации
Если команда repo sync возвращает сообщение о конфликтах синхронизации:
- Просмотрите файлы, которые не были объединены (код состояния = U).
- При необходимости отредактируйте регионы конфликта.
- Перейдите в соответствующий каталог проекта. Добавьте и зафиксируйте затронутые файлы, затем выполните перебазирование изменений:
git add .git commitgit rebase --continue - После завершения операции перебазирования запустите синхронизацию заново:
repo sync PROJECT0 PROJECT1 ... PROJECTN
Уборка клиентов
После слияния изменений в Gerrit обновите локальный рабочий каталог, затем используйте repo prune чтобы безопасно удалить устаревшие тематические ветки:
repo syncrepo prune
Удаление клиентов
Поскольку вся информация о состоянии хранится в вашем клиенте, вам нужно всего лишь удалить каталог из файловой системы:
rm -rf WORKING_DIRECTORY
Удаление клиента навсегда удаляет все изменения, которые вы не загрузили для проверки.