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
: продолжить синхронизацию других проектов, даже если проект не удалось синхронизировать. -
threadcount
: разделите синхронизацию между потоками для более быстрого завершения. Убедитесь, что вы не перегружаете свою машину — оставьте часть процессора зарезервированной для других задач. Чтобы увидеть количество доступных процессоров, сначала запуститеnproc --all
. -
-q
: работать тихо, подавляя сообщения о состоянии. -
-s
: синхронизировать с заведомо исправной сборкой, указанной в элементеmanifest-server
в текущем манифесте.
Чтобы получить дополнительные параметры, запустите repo help sync
.
загрузить
repo upload [project-list]
Загружает изменения на сервер проверки. Для указанных проектов 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
не была запущена в начале сеанса. Чтобы восстановиться, вы можете проверить идентификатор фиксации, создать новую ветку, а затем объединить ее.