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

Работа с кодом 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 для загрузки исходного кода см. в разделе Загрузка исходного кода и Справочник по командам 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 возвращает конфликты синхронизации:

  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

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