长答案:
您不能为 指定分支名称(或 SHA 或其他任何名称)repo
,它将不起作用。原因如下:
repo
是一个处理存储库项目(实际上是独立的 git)集合的脚本。项目列表位于.repo
git 中,并包含一个清单文件,该文件基本上是所有存储库 git 及其分支的列表。-b
仅与repo
git 期间有关repo 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>
如您所见,这两个清单之间的唯一区别是存储库 git 的修订值。
简短的回答:
您需要获取manifest_static.xml
特定版本。
或者,如果您只是缺少一些项目 git,那么您可以local_manifest.xml
在 git 中创建文件,在.repo
其中添加缺少的 git,然后repo sync
从存储库的根目录中添加。更多关于local_manifest.xml
使用的信息在这里。