Repo コマンド リファレンス

Repo は Git を補完するもので、複数リポジトリでの作業を簡素化します。Repo と Git の関係については、ソース管理ツールをご覧ください。Repo の詳細については、Repo の README をご覧ください。

Repo を使用する際の形式は次のとおりです。

repo command options

省略可能な要素は、角かっこ([])で囲んで表示します。たとえば、多くのコマンドは project-list を引数に取ります。project-list を使用することで、名前のリストや、プロジェクトのローカルソース ディレクトリへのパスのリストを指定できます。

repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]

help

repo help

repo コマンドに関するヘルプを提供します。Repo コマンドをオプションとして指定して、特定のコマンドに関する詳細情報を確認できます。

repo help command

たとえば、次のコマンドは、init コマンドのオプションのリストと説明を返します。

repo help init

使用可能なオプションのリストのみを表示するには、次のコマンドを実行します。

repo command --help

次に例を示します。

repo init --help

init

repo init -u url [options]

現在のディレクトリに Repo をインストールします。このコマンドは、Repo のソースコードと標準の Android マニフェスト ファイル用の Git リポジトリを持つ .repo/ ディレクトリを作成します。

オプション:

  • -u: マニフェスト リポジトリの取得元となる URL を指定します。https://android.googlesource.com/platform/manifest に、よく使用されるマニフェストがあります。

  • -m: リポジトリ内のマニフェスト ファイルを選択します。マニフェスト名が選択されていない場合、デフォルトで default.xml になります。

  • -b: リビジョン(特定の manifest-branch)を指定します。

sync

repo sync [project-list]

新しい変更要素をダウンロードして、ローカル環境内の作業ファイルを更新します。基本的には、すべての Git リポジトリを横断して git fetch を行います。引数なしで repo sync を実行すると、すべてのプロジェクトのファイルが同期されます。

repo sync を実行すると、次のようになります。

  • プロジェクトが同期されていない場合、repo syncgit clone と同等になります。リモート リポジトリ内のすべてのブランチが、ローカル プロジェクト ディレクトリにコピーされます。

  • 以前にプロジェクトが同期されていた場合は、repo sync は次の場合と同等になります

    git remote update
    git rebase origin/branch
    

    ここで branch は、ローカル プロジェクト ディレクトリ内で現在チェックアウトされているブランチです。ローカル ブランチがリモート リポジトリ内のブランチをトラッキングしていない場合、プロジェクトの同期は行われません。

repo sync の実行が正常に終了すると、指定プロジェクト内のコードが最新の状態になり、リモート リポジトリ内のコードと同期されます。

主要なオプション:

  • -c: サーバーから現在のマニフェスト ブランチのみを取得します。
  • -d: 指定プロジェクトをマニフェスト リビジョンに切り替えます。このオプションは、プロジェクトがトピック ブランチにあり、マニフェストのリビジョンが一時的に必要な場合に便利です。
  • -f: プロジェクトが同期に失敗した場合でも、他のプロジェクトの同期を続行します。
  • threadcount: 早く完了するために同期をスレッド間で分割します。マシンを占有することのないように、CPU の一部を他のタスク用に予約したままにしてください。利用可能な CPU の数を確認するには、nproc --all コマンドを実行します。
  • -q: ステータス メッセージを抑制して、サイレントで実行します。
  • -s: 現在のマニフェスト内の manifest-server 要素によって指定されている既知の正常なビルドに対して同期します。

その他のオプションについて知りたい場合は、repo help sync を実行してください。

upload

repo upload [project-list]

レビュー サーバーに変更内容をアップロードします。指定プロジェクトを対象に、前回の Repo 同期時に更新されたリモート ブランチとローカル ブランチを比較します。まだ審査用にアップロードしていないブランチを 1 つまたは複数選択するように求められます。

選択したブランチに対するコミットは、すべて HTTPS 接続経由で Gerrit に送信されます。アップロードの承認を有効にするには、HTTPS パスワードを設定する必要があります。HTTPS 経由で使用する新しいユーザー名とパスワードのペアを生成するには、Password generator にアクセスします。

Gerrit は、サーバー経由でオブジェクト データを受信すると、各コミットを変更要素に変えて、審査担当者が特定のコミットにコメントできるようにします。複数のチェックポイント コミットを 1 つのコミットに統合するには、アップロードを実行する前に git rebase -i を使用します。

repo upload を引数なしで実行すると、変更要素をアップロードするすべてのプロジェクトが検索されます。

アップロードした変更要素を編集するには、git rebase -i または git commit --amend などのツールを使用して、ローカル コミットを更新します。編集が完了したら、次の手順を行います。

  • 更新されたブランチが、現在チェックアウトされているブランチであることを確認します。
  • repo upload --replace PROJECT を使用して、変更一致エディタを開きます。
  • 対象となるコミットごとに、Gerrit の変更 ID を角かっこで囲んで入力します。

    # 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 を渡して、ローカルのブランチ名と同じ名前をトピックに設定できます。

diff

repo diff [project-list]

git diff を使用すると、コミットと作業ツリーとの間で未処理になっている変更が示されます。

download

repo download target change

指定した変更要素を審査システムからダウンロードして、プロジェクトのローカル作業ディレクトリ内で使用できるようにします。

たとえば、change 23823platform/build ディレクトリにダウンロードするには、次のように指定します。

repo download platform/build 23823

repo sync を実行すると、repo download を使用して取得したコミットが削除されます。また、git checkout m/main を使用して、リモート ブランチをチェックアウトすることもできます。

forall

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 のストリームにパイプをバインドし、すべての出力を 1 ページのみのセッション内に表示される連続ストリームにパイプすることで実現されます。
  • -v: コマンドが stderr に書き込むメッセージを表示します。

prune

repo prune [project-list]

すでにマージされているトピックを prune(削除)します。

start

repo start branch-name [project-list]

開発用の新しいブランチを、マニフェスト内で指定されているリビジョンから開始します。

BRANCH_NAME 引数は、プロジェクトに加える変更に関する簡単な説明を示します。不明な場合は、default を名前として使用することをおすすめします。

project-list 引数は、このトピック ブランチに参加するプロジェクトを指定します。

status

repo status [project-list]

それぞれの指定プロジェクト内で、ステージング領域(インデックス)と、ブランチに対する直近のコミット(HEAD)を、作業ツリーと比較します。この 3 つの状態の間に相違がある場合、各ファイルの概要が 1 行で表示されます。

現在のブランチのステータスのみを表示するには、repo status . を実行します。ステータス情報は、プロジェクトごとにリスト表示されます。プロジェクト内のファイルごとに、2 文字のコードが使用されます。

最初の列は、ステージング領域が前回のコミット時の状態からどのように異なっているのかを大文字のコードで示します。

文字 意味 説明
- 変更なし HEAD とインデックスで同じ
A 追加済み HEAD で異なる。インデックスで同じ
M 変更済み HEAD で同じ。インデックスで変更済み
D 削除済み HEAD で同じ。インデックスで異なる
R 名前変更済み HEAD で異なる。インデックスでパスが変更済み
C コピー済み HEAD で異なる。インデックスで他からコピー済み
T モード変更済み HEAD とインデックスで内容が同じ。モード変更済み
U 結合を解除 HEAD とインデックス間で競合。対処が必要

2 番目の列は、作業ディレクトリとインデックスがどのように異なっているのかを小文字のコードで示します。

文字 意味 説明
- 新規または不明 インデックスで異なる。作業ツリーで同じ
m 変更済み インデックスで同じ。作業ツリーで変更済み
d 削除済み インデックスで同じ。作業ツリーで異なる

Repo エラーを処理する

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 start が実行されなかった場合、エラー repo: error: no branches ready for upload が表示されます。復元するには、コミット ID を確認し、新しいブランチを開始してマージします。