8

(私の開発マシンで) AOSP の新しいブランチを作成し、それを (同じ LAN 上のサーバーで) ローカル ミラーにプッシュしようとしています。これを行う方法を説明する「レポ」ツールのドキュメントが見つかりません。

以下を使用して、サーバー上に AOSP ソースのミラーを作成しました。

$ mkdir -p ~/aosp/mirror
$ cd ~/aosp/mirror
$ repo init -u https://android.googlesource.com/mirror/manifest --mirror

次に、別のコンピューターで同期します。

 $ repo init -u <USERNAME>@<IP_OF_SERVER>:/home/<USERNAME>/aosp/mirror/platform/manifest.git -b android-4.2.2_1
 $ repo sync

ここまでは順調ですね。このバージョンの JellyBean をベースラインとして使用するには開発が必要なので、「-b android-4.2.2_1」を使用しています。

次に、「repo start」を使用して新しいブランチを作成します。

$ repo start my-branch-name --all

まだいい。問題は、このブランチをリモート サーバーに「プッシュ」する方法がわからないことです。

私がrepo info見るとき:

Manifest branch: refs/tags/android-4.2.2_r1
Manifest merge branch: android-4.2.2_r1
Manifest groups: all,-notdefault
----------------------------
Project: platform/abi/cpp
Mount path: /home/<username>/<project_name>/android/abi/cpp
Current revision: refs/tags/android-4.2.2_r1
Local Branches: 1 [my-branch-name]
---------------------------
....

試してみると、次のrepo uploadようになります。

no branches ready for upload

次に、ローカルブランチを各リモートリポジトリにプッシュする方法を試しましrepo forall -c "git push aosp my-branch-name"、これは適切な方法ではないようです。特に、新しいクライアントを作成してブランチに同期しようとすると、うまくいきません。

$ repo init -u <USERNAME>@<IP_OF_SERVER>:/home/<USERNAME>/aosp/mirror/platform/manifest.git -b my-branch-name
error: revision my-branch-name in manifests not found

「マニフェスト ブランチ」を作成する適切な方法は何ですか?

4

1 に答える 1

12

このrepo startコマンドは、現在の上流ブランチに基づいてローカル ブランチを作成します。実行repo uploadすると、マニフェスト ファイルにリストされている Gerrit サーバーによってホストされている上流のブランチに、現在チェックアウトされているブランチのローカル コミットがレビュー用にアップロードされます。実行したいプッシュのタイプがこのユース ケースと一致しない場合は、プッシュに基になる Git コマンドを使用する必要があります。ただし、引き続き使用できrepo startます(ただし、使用する必要はありません)。

マニフェスト ブランチを作成しますrepo startが、repo upload役に立ちません。Repo が管理する他の git とは異なり、defaultRepo がチェックアウトするブランチのマニフェスト git にすべての変更を加える必要があります。次に、プレーンな Git コマンドを使用して変更をプッシュします。

mybranch次の例は、現在のアップストリームと同じ、という名前の新しいマニフェスト ブランチを作成する方法を示しています。

cd .repo/manifests
git push origin default:refs/heads/mybranch

マニフェストの内容は上流のブランチと同じであるため、これ自体はあまり役に立ちません。マニフェストのブランチを複製しただけなので

repo init -u ssh://git.example.com/platform/manifest -b mybranch

結果はあなたが始めたものと同じになります:

repo init -u ssh://git.example.com/platform/manifest -b android-4.2.2_1

ミラーを有効にするには、マニフェストにリストされている各 git をブランチして、変更を加えることができるサーバー上のブランチを取得する必要もあります。

理論的には、アップストリームからダウンロードしたのと同じブランチに変更を加えることができますが、次にアップストリームから同期しようとすると混乱が生じます。そうしないでください。

サーバー上にブランチを作成するには、マニフェストと同じパターンに従います。

cd build
git push ssh://git.example.com/platform/build HEAD:refs/heads/mybranch

現在チェックアウトされているコミットのシンボル名である HEAD の使用に注意してください。すべての git に対してこれを行うのは面倒なので、次のrepo forallコマンドを使用します。

repo forall -c 'git push aosp HEAD:refs/heads/mybranch'

リモート名はマニフェスト git (IIRC) とは異なることに注意してください。

repo help forallによって実行されるコマンドで使用できる環境変数のリストについては、を参照してくださいrepo forall( REPO_PROJECT$REPO_LREV、および$REPO_RREVがおそらく最も便利なものです)。

を台無しにするのは簡単なrepo forallので、コマンドの前に最初に を追加して、実行されたはずechoのコマンドが端末にエコーされるようにすることをお勧めします。結果に満足したら、実際にコマンドを実行するために削除します。echo

これmybranchで、マニフェストを含むすべての git にブランチが作成されます。残っているのは、マニフェストを次のように変更することです。

repo init -u ssh://git.example.com/platform/manifest -b mybranch

実際mybranchにすべてのgitをチェックアウトします。

cd .repo/manifests
vi default.xml
[ Change the default revision from refs/tags/android-4.2.2_1
  or whatever it says to 'mybranch'. ]
git commit -a -m 'Changed default revision to mybranch.'
git push origin default:refs/heads/mybranch

すべての git が必ずしもデフォルトのリビジョン (変更したばかりのmybranch) を使用するとは限らないことに注意してください。これはおそらく android-4.2.2_1 マニフェスト ブランチの場合ですが、他のケースでは、一部の git はデフォルトのリビジョンを使用せず、代わりに独自のリビジョン属性でオーバーライドします。これで問題ありませんが、マニフェストをさらに変更する必要があります。

于 2013-11-04T04:34:37.627 に答える