Repo дополняет Git, упрощая работу с несколькими репозиториями. Для объяснения взаимосвязи между Repo и Git см. Source control tools . Для получения более подробной информации о Repo см . Repo README
Использование РЕПО осуществляется в следующей форме:
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 и 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
не была запущена в начале сеанса. Чтобы восстановиться, вы можете проверить идентификатор коммита, начать новую ветку и затем объединить ее.