Для работы с кодом 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/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
При удалении клиента безвозвратно удаляются все изменения, которые вы не загрузили для проверки.