Справочник по командам репо

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 для краткости).

разница

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 не была запущена в начале сеанса. Чтобы восстановиться, вы можете проверить идентификатор фиксации, создать новую ветку, а затем объединить ее.