Repo дополняет Git, упрощая работу с несколькими репозиториями. См. раздел « Инструменты управления исходным кодом » для объяснения взаимосвязи между Repo и Git. Для получения дополнительной информации о Repo см. Repo README .
Использование репо принимает следующую форму:
repo command options
Необязательные элементы показаны в скобках [ ]. Например, многие команды принимают project-list в качестве аргумента. Вы можете указать project-list как список имен или список путей к локальным исходным каталогам для проектов:
repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]
помощь
На этой странице просто выделены ключевые параметры. Полную информацию см. в справке по командной строке. Когда Repo установлен, вы можете найти последнюю документацию, начиная со сводки всех команд, выполнив:
repo help
Вы можете просмотреть подробную информацию о любой команде, запустив ее в дереве репозитория:
repo help command
Например, следующая команда выводит описание и список параметров для аргумента init
Repo, который инициализирует Repo в текущем каталоге. (Подробности см. в разделе 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 текущий рабочий каталог должен быть либо родительским каталогом .repo/
, либо подкаталогом родительского каталога.
синхронизировать
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
— это извлеченная в данный момент ветвь в локальном каталоге проекта. Если локальная ветвь не отслеживает ветвь в удаленном репозитории, то для проекта не выполняется синхронизация.Если операция перебазирования Git приводит к конфликтам слияния, используйте обычные команды Git (например,
git rebase --continue
) для разрешения конфликтов.
После успешного выполнения repo sync
код в указанных проектах обновляется и синхронизируется с кодом в удаленном репозитории.
Вот ключевые параметры. См. repo help sync
для получения дополнительной информации:
-c
: получить только текущую ветку манифеста с сервера.-d
: переключить указанные проекты обратно на версию манифеста. Это полезно, если проект в настоящее время находится в тематической ветке, но временно требуется версия манифеста.-f
: продолжить синхронизацию других проектов, даже если синхронизация проекта не удалась.-j threadcount
: разделить синхронизацию между потоками для более быстрого завершения. Убедитесь, что вы не перегружаете свою машину — оставьте часть процессора зарезервированной для других задач. Чтобы увидеть количество доступных ЦП, сначала запустите:nproc --all
-q
: работать тихо, подавляя сообщения о состоянии.-s
: синхронизировать с заведомо исправной сборкой, как указано в элементе manifest-server в текущем манифесте.
загрузить
repo upload [project-list]
Для указанных проектов Repo сравнивает локальные ветки с удаленными ветвями, обновленными во время последней синхронизации Repo. Репо предлагает вам выбрать одну или несколько веток, которые не были загружены для проверки.
Все коммиты в выбранных ветках затем передаются в Gerrit по HTTPS-соединению. Вам необходимо настроить пароль HTTPS, чтобы включить авторизацию загрузки. Посетите Генератор паролей , чтобы сгенерировать новую пару имя пользователя/пароль для использования по протоколу HTTPS.
Когда Gerrit получает данные объекта через свой сервер, он превращает каждую фиксацию в изменение, чтобы рецензенты могли прокомментировать конкретную фиксацию. Чтобы объединить несколько коммитов контрольных точек в один коммит, используйте git rebase -i
перед запуском загрузки.
Если вы запускаете repo upload
без аргументов, он ищет во всех проектах изменения для загрузки.
Чтобы отредактировать изменения после их загрузки, используйте такой инструмент, как git rebase -i
или git commit --amend
для обновления ваших локальных коммитов. После завершения редактирования:
- Убедитесь, что обновленная ветвь является текущей проверенной ветвью.
- Для каждого коммита в серии введите идентификатор изменения Gerrit в скобках:
# Replacing from branch foo [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific... [ 2829 ] ec18b4ba Update proto client to support patch set replacments # 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
для краткости).
разница
repo diff [project-list]
Показывает незавершенные изменения между фиксацией и рабочим деревом с помощью git diff
.
скачать
repo download target change
Загружает указанное изменение из системы обзора и делает его доступным в локальном рабочем каталоге вашего проекта.
Например, чтобы загрузить изменение 23823 в каталог платформы/сборки:
repo download platform/build 23823
Запуск repo sync
удаляет все коммиты, полученные с помощью repo download
. Или вы можете проверить удаленную ветку, используя git checkout m/master
.
Примечание. Существуют задержки репликации на все серверы по всему миру, поэтому существует небольшая задержка зеркального отображения между моментом, когда изменение отображается в Интернете в Gerrit , и моментом, когда repo download
может найти изменение для всех пользователей.
для всех
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 и индексе, изменен режим |
U | Необъединенный | Конфликт между 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
не была запущена в начале сеанса. Для восстановления вы можете проверить идентификатор коммита, запустить новую ветку, а затем объединить ее.