7

Nexus S電話(samsung crespo)用のCyanogenmod 9(Android ICS)システムを構築しています。問題は、私がそうする場合:

repo init -u git://github.com/CyanogenMod/android.git -b ics  

リポジトリはICSの最新のコミットを開始します。このコミットでは、マニフェストに必要なdevice / samsung /プロジェクト(具体的にはhttps://github.com/CyanogenMod/android_device_samsung_crespo)が含まれていません。

特定のコミットに初期化するにはどうすればよいですか?私の場合、googleandroid-4.0.3_r1ブランチを使用して最後のコミットが必要です。これは:

私が行った場合

repo init -u git://github.com/CyanogenMod/android.git -b commit-hash

動作しません。repoinit-bはブランチのHEADのみをサポートしているようです。

前もって感謝します。

4

3 に答える 3

9

私はそれを考え出した。マニフェストファイル(たとえば、version.xml)にタグがある場合。次のコマンドを使用して、特定のタグに初期化できます。

repo init -u <addres> -b refs/tags/<tagname> -m version.xml
于 2013-10-28T14:04:36.547 に答える
5

長い答え:

ブランチ名(またはSHAなど)を指定することはできません。指定してrepoも機能しません。理由は次のとおりです。

repoリポジトリプロジェクトのコレクションを処理するスクリプトです(実際には独立したgitです)。プロジェクトリストは.repogitにあり、マニフェストファイルが含まれています。マニフェストファイルは、基本的にすべてのリポジトリgitとそれらのブランチのリストです。中のgitに-bのみ関連します。reporepo init

次に例を示し.repo/manifests/default.xmlます。

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="git://address.com/" name="origin"
          review="review.address.com"/>
  <default remote="origin" revision="ics-something" sync-j="4"/>
  <manifest-server url="http://manifests.address.com:8000"/>
  <!-- sniff -->
  <project name="platform/external/libxml2" path="external/libxml2"
           revision="ics-common"/>
  <project name="platform/external/zlib" path="external/zlib"
           revision="ics-common"/>
  <project name="platform/frameworks/base" path="frameworks/base"
           revision="ics-something"/>
  <project name="platform/packages/apps/Bluetooth" path="packages/apps/Bluetooth"
           revision="ics-common"/>
  <!-- sniff -->
</manifest>

したがって、特定のビルドのリポジトリのソースを取得する正しい方法は、マニフェストを取得することです。
つまり、マニフェストには、ブランチ名の代わりにSHA(またはタグが存在する場合は実質的に同じ)が含まれます。このようにして、リポジトリ内のすべてのgitプロジェクトは、マニフェストファイルで指定されているコミットを指し示します。

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="git://address.com/" name="origin"
          review="review.address.com"/>
  <default remote="origin" revision="ics-something" sync-j="4"/>
  <manifest-server url="http://manifests.address.com:8000"/>
  <!-- sniff -->
  <project name="platform/external/libxml2" path="external/libxml2"
           revision="refs/tags/android-4.0.4_r1.1"/>
  <project name="platform/external/zlib" path="external/zlib"
           revision="refs/tags/android-4.0.4_r1.1"/>
  <project name="platform/frameworks/base" path="frameworks/base"
           revision="ecb41a77411358d385e3fde5b4e98a5f3d9cfdd5"/>
  <project name="platform/packages/apps/Bluetooth" path="packages/apps/Bluetooth"
           revision="621bae79f1a250e443eb83d1f473c533bea493dc"/>
  <!-- sniff -->
</manifest>

ご覧のとおり、これら2つのマニフェストの唯一の違いは、リポジトリgitのリビジョン値です。

短い答え:

manifest_static.xml特定のビルドを取得する必要があります。

または、いくつかのプロジェクトgitが欠落している場合は、gitでlocal_manifest.xmlファイルを作成し.repo、そこに欠落しているgitを追加してrepo syncから、リポジトリのルートから追加することができます。local_manifest.xml使用法の詳細については、こちらをご覧ください。

于 2012-05-30T16:33:17.430 に答える
3

コメントを提出するのに十分な権限がありませんが、AndrejsCainikovsの答えを明確にしたかっただけです。

Repoは、-bオプションの引数として、ブランチrefに加えてcommit-idSHAを受け入れます。

回答が示唆しているように、この引数は、マニフェストが参照するプロジェクトのリビジョンではなく、リポジトリで使用されるマニフェストのリビジョンを指定します。

于 2014-07-25T00:42:38.320 に答える