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
для краткости).
Для связанных изменений полезно хранить все CL в одной теме. Вы можете добавить название темы при загрузке с помощью --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 и индексе |
А | Добавлен | Не в HEAD, в индексе |
М | Измененный | В HEAD, изменено в индексе |
Д | Удалено | В HEAD, а не в индексе |
Р | Переименован | Не в HEAD, путь изменен в индексе |
С | Скопировано | Нет в HEAD, скопировано из другого в индексе |
Т | Режим изменен | Тот же контент в HEAD и индексе, режим изменен |
У | Необъединенный | Конфликт между 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
не была выполнена в начале сеанса. Чтобы исправить ситуацию, проверьте идентификатор коммита, создайте новую ветку и выполните слияние.