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