Repo дополняет Git, упрощая работу с несколькими репозиториями. Объяснение взаимосвязи между Repo и Git см. в разделе «Инструменты контроля версий» . Более подробную информацию о Repo см. в файле README Repo.
Использование репозитория принимает следующую форму:
repo command options
Необязательные элементы отображаются в квадратных скобках []. Например, многие команды принимают в качестве аргумента project-list . Вы можете указать project-list как список имен или список путей к локальным каталогам исходного кода для проектов:
repo sync [project0 project1 ... projectn]repo sync [/path/to/project0 ... /path/to/projectn]
помощь
repo help
Предоставляет справку по команде repo . Вы можете просмотреть подробную информацию о конкретной команде `repo`, указав команду в качестве параметра:
repo help command
Например, следующая команда выводит описание и список параметров для команды init :
repo help init
Или, чтобы увидеть только список доступных параметров для команды, выполните:
repo command --help
Например:
repo init --help
инициализация
repo init -u url [options]
Устанавливает Repo в текущий каталог. Эта команда создает каталог .repo/ с репозиториями Git для исходного кода Repo и стандартных файлов манифеста Android.
Параметры:
-u: Укажите URL-адрес, с которого следует получить репозиторий манифестов. Стандартный манифест находится по адресуhttps://android.googlesource.com/platform/manifest.-m: Выберите файл манифеста в репозитории. Если имя файла манифеста не выбрано, по умолчанию используетсяdefault.xml.-b: Укажите ревизию, то есть конкретную manifest-branch .
синхронизация
repo sync [project-list]
Эта команда загружает новые изменения и обновляет рабочие файлы в вашей локальной среде, по сути, выполняя команду git fetch для всех репозиториев Git. Если вы запустите repo sync без аргументов, она синхронизирует файлы для всех проектов.
Вот что происходит при выполнении repo sync :
Если проект никогда не синхронизировался, то
repo syncэквивалентна командеgit clone; все ветки в удаленном репозитории копируются в локальный каталог проекта.Если проект уже был синхронизирован ранее, то
repo syncэквивалентна следующей:git remote update git rebase origin/branch
Где branch — это текущая ветка, находящаяся в локальном каталоге проекта. Если локальная ветка не отслеживает ветку в удаленном репозитории, синхронизация проекта не происходит.
После успешного выполнения команды repo sync код в указанных проектах становится актуальным и синхронизируется с кодом в удаленном репозитории.
Основные параметры:
-
-c: Загрузить с сервера только текущую ветку манифеста. -
-d: Переключить указанные проекты обратно на версию манифеста. Эта опция полезна, если проект находится в тематической ветке, но версия манифеста необходима временно. -
-f: Продолжать синхронизацию других проектов, даже если синхронизация какого-либо проекта не удалась. -
-j threadcount: Разделить синхронизацию между потоками для более быстрого завершения. Убедитесь, что вы не перегружаете свою машину — оставьте часть ЦП зарезервированной для других задач. Чтобы узнать количество доступных ЦП, сначала запуститеnproc --all. -
-q: Запуск в тихом режиме путем подавления сообщений о состоянии. -
-s: Синхронизация с заведомо работоспособной сборкой, указанной в элементеmanifest-serverв текущем манифесте.
Для получения дополнительных параметров выполните команду repo help sync .`.
загрузить
repo upload [project-list]
Загружает изменения на сервер проверки. Для указанных проектов Repo сравнивает локальные ветки с удаленными ветками, обновленными во время последней синхронизации Repo. Repo предлагает выбрать одну или несколько веток, которые еще не были загружены для проверки.
Все коммиты в выбранных ветках затем передаются в Gerrit по HTTPS-соединению. Для авторизации загрузки необходимо настроить пароль HTTPS. Чтобы сгенерировать новую пару имя пользователя/пароль для использования по HTTPS, посетите генератор паролей .
Когда Gerrit получает данные объекта на свой сервер, он преобразует каждый коммит в изменение, чтобы рецензенты могли комментировать конкретный коммит. Чтобы объединить несколько контрольных точек в один коммит, используйте git rebase -i перед запуском загрузки.
Если запустить repo upload без аргументов, она выполнит поиск изменений для загрузки во всех проектах.
Чтобы отредактировать изменения после их загрузки, используйте такие инструменты, как git rebase -i или git commit --amend чтобы обновить локальные коммиты. После завершения редактирования:
- Убедитесь, что обновленная ветка соответствует текущей ветке, из которой был выполнен контрольный запрос.
- Используйте
repo upload --replace PROJECT, чтобы открыть редактор соответствия изменений. Для каждого коммита в серии введите идентификатор изменения Gerrit в скобках:
# Replacing from branch foo [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific... [ 2829 ] ec18b4ba Update proto client to support patch set replacements # Insert change numbers in the brackets to add a new patch set. # To create a new change record, leave the brackets empty.
После завершения загрузки к внесенным изменениям добавляется дополнительный набор патчей.
Если вы хотите загрузить только текущую ветку Git, используйте флаг --current-branch (или --cbr ).
Для связанных изменений полезно хранить все изменения в одной теме. Вы можете добавить имя темы при загрузке с помощью --topic=TOPIC . Или просто передайте -t , чтобы установить имя темы таким же, как и имя локальной ветки.
разница
repo diff [project-list]
Отображает существенные изменения между коммитом и рабочим деревом с помощью git diff .
скачать
repo download target change
Загружает указанные изменения из системы рецензирования и делает их доступными в локальном рабочем каталоге вашего проекта.
Например, чтобы загрузить изменение 23823 в каталог platform/build :
repo download platform/build 23823
Запуск repo sync удаляет все коммиты, полученные с помощью repo download . Или вы можете переключиться на удалённую ветку, используя git checkout m/main .
для всех
repo forall [project-list] -c command
Выполняет указанную команду оболочки в каждом проекте. repo forall предоставляет следующие дополнительные переменные среды:
-
REPO_PROJECTзадаёт уникальное имя проекта. -
REPO_PATH— это путь относительно корневого каталога клиента. -
REPO_REMOTE— это имя удалённой системы из манифеста. -
REPO_LREV— это имя ревизии из манифеста, преобразованное в локальную отслеживаемую ветку. Используйте эту переменную, если вам нужно передать ревизию манифеста локально выполняемой команде Git. -
REPO_RREV— это имя ревизии из манифеста, точно так, как оно указано в манифесте.
Параметры:
-
-c: Команда и аргументы для выполнения. Команда обрабатывается с помощью/bin/sh, и любые аргументы после неё передаются в качестве позиционных параметров оболочки. -
-p: Отображать заголовки проекта перед выводом указанной команды. Это достигается путем привязки каналов к потокам stdin, stdout и sterr команды и перенаправления всего вывода в непрерывный поток, отображаемый в рамках одной сессии пейджера. -
-v: Отображать сообщения, которые команда выводит в stderr.
чернослив
repo prune [project-list]
Удаляет (очищает) уже объединенные темы.
начинать
repo start branch-name [project-list]
Начинается новая ветка разработки, начиная с версии, указанной в манифесте.
Аргумент BRANCH_NAME предоставляет краткое описание изменений, которые вы пытаетесь внести в проекты. Если вы не знаете, используйте имя default .
Аргумент project-list указывает, какие проекты участвуют в данной тематической ветви.
статус
repo status [project-list]
Сравнивает рабочее дерево с областью подготовки (индексом) и самым последним коммитом в этой ветке (HEAD) в каждом указанном проекте. Отображает сводную строку для каждого файла, в котором наблюдается разница между этими тремя состояниями.
Чтобы увидеть статус только текущей ветки, выполните repo status . Информация о статусе отображается по проектам. Для каждого файла в проекте используется двухбуквенный код.
В первом столбце заглавная буква указывает, чем область подготовки отличается от последнего зафиксированного состояния.
| Письмо | Значение | Описание |
|---|---|---|
| - | Без изменений | То же самое в HEAD и index. |
| А | Добавлен | Не в HEAD, а в индексе. |
| М | Модифицированный | В HEAD, изменено в индексе |
| Д | Удалено | В HEAD, а не в index. |
| Р | Переименовано | Не в HEAD, путь изменен в index. |
| С | Скопировано | Нет в HEAD, скопировано из другого файла в индексе. |
| Т | Режим изменен | Содержимое в HEAD и index одинаковое, режим изменен. |
| У | Необъединенный | Конфликт между HEAD и индексом; требуется его разрешение. |
Во втором столбце строчная буква указывает, чем рабочий каталог отличается от указателя.
| Письмо | Значение | Описание |
|---|---|---|
| - | Новый/неизвестный | Не в индексе, а в рабочем дереве. |
| м | Модифицированный | В индексе, в дереве задач, изменено |
| д | Удалено | В индексе, а не в дереве задач. |
Обработка ошибок репозитория
git commit -a # Commit local changes first so they aren't lost.
repo start branch-name # Start the branch
git reset --hard HEAD@{1} # And reset the branch so that it matches the commit before repo start
repo upload .
Ошибка repo: error: no branches ready for upload появляется, если команда repo start не была выполнена в начале сессии. Для восстановления можно проверить идентификатор коммита, создать новую ветку, а затем выполнить слияние.
Структура репозитория Git
В Android репозитории Git (проекты) не вложены. Каждый проект связан с определенной директорией в дереве исходного кода, и все подкаталоги и файлы в этой директории являются частью одного и того же проекта. Избегайте использования функции git submodule в Repo для разработки под Android.