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 をインストールした後、次のコマンドを実行すると、全コマンドの概要から始まる最新のドキュメントを参照できます。
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 sync
はgit 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 は、サーバー経由でオブジェクト データを受信すると、各コミットを変更要素に変えて、審査担当者が特定のコミットにコメントできるようにします。複数のチェックポイント コミットを 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 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 | 削除済み | インデックスで同じ。作業ツリーで異なる |
リポジトリ エラーの処理
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 を確認し、新しいブランチを開始してマージします。