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]
    

ヘルプ

このページでは、主要なオプションのみを取り上げます。詳細については、コマンドラインのヘルプをご覧ください。Repo をインストールすると、次のコマンドを実行して、全コマンドの概要などを含めた最新のドキュメントが参照できます。

    repo help
    

Repo ツリー内で次のコマンドを実行すると、コマンドの詳細情報を確認できます。

    repo help command
    

たとえば、次のコマンドは、Repo の init 引数に関する説明とオプションの一覧を返します。同引数を指定することで、Repo がカレント ディレクトリで初期化されます(詳細については、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 を指定します。

注: 残りのすべての Repo コマンドについては、現在の作業ディレクトリが .repo/ の親ディレクトリ、または親ディレクトリのサブディレクトリであることが必要です。

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 は、ローカル プロジェクト ディレクトリで現在チェックアウトされているブランチです。ローカル ブランチがリモート リポジトリのブランチを追跡していない場合、プロジェクトの同期は行われません。

  • Git rebase 操作でマージの競合が発生した場合は、通常の Git コマンド(たとえば、git rebase --continue)を使用して競合を解決します。

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

主なオプションは次のとおりです。詳細については、repo help sync をご覧ください。

  • -c: サーバーから現在のマニフェスト ブランチのみを取得します。

  • -d: 指定したプロジェクトをマニフェストのリビジョンに切り替えます。これは、プロジェクトがトピック ブランチにあり、マニフェストのリビジョンが一時的に必要な場合に便利です。

  • -f: プロジェクトが同期に失敗した場合でも、他のプロジェクトの同期を続行します。

  • -jthreadcount: 早く完了するために同期をスレッド間で分割します。CPU の一部を他のタスクのために予約したままにして、マシンを占有しないようにします。使用可能な CPU の数を確認するには、次のコマンドを実行します。nproc --all

  • -q: ステータス メッセージを抑制して、サイレントで実行します。

  • -s: 現在のマニフェストの manifest-server 要素によって指定された、既知の正常なビルドに対して同期します。

upload

    repo upload [project-list]
    

指定されたプロジェクトについて、Repo の最終同期時に更新されたリモート ブランチとローカル ブランチを比較します。アップロードされていないブランチを、レビュー用に 1 つ以上選択するように求められます。

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

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

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

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

  • 更新されたブランチが、現在チェックアウトされているブランチであることを確認します。
  • 一連のコミットごとに、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 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)を使用します。

diff

    repo diff [project-list]
    

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

download

    repo download target change
    

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

たとえば、change 23823 をプラットフォームやビルド ディレクトリにダウンロードするには、次のようにします。

    repo download platform/build 23823
    

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

注: 世界各地にあるそれぞれのサーバーでレプリケーションの遅延が発生することから、Gerrit のウェブ上で変更が確認できるようになるタイミングと、すべてのユーザーが repo download で変更を確認できるようになるタイミングとの間には、わずかなミラーリング ラグが存在します。

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 削除済み インデックスで同じ。作業ツリーで異なる