我正在为Nexus S手机(三星克雷斯波)构建Cyanogenmod 9(Android ICS)系统。问题是,如果我这样做:
repo init -u git://github.com/CyanogenMod/android.git -b ics
字符串
repo初始化到ICS的最新提交,其中清单不包括我需要的一些设备/samsung/项目(特别是https://github.com/CyanogenMod/android_device_samsung_crespo)。
我如何将init存储到一个特定的提交中?在我的例子中,我希望最后一次提交使用谷歌android-4.0.3_r1分支。是这个吗:
如果我做了
repo init -u git:github.com/CyanogenMod/android.git-B commit-hash
不工作,似乎repo init -B只支持分支的HEAD。
提前感谢。
5条答案
按热度按时间ioekq8ef1#
我想出来了如果您的清单文件中有一个标记(例如version.xml)。您可以使用以下命令将init重新存储到特定标记:
字符串
rks48beu2#
长回答:
不能为
repo
指定分支名称(或SHA,或其他任何名称),这将不起作用。原因如下:repo
是一个脚本,用于处理一组仓库项目(实际上是独立的git项目)。项目列表位于.repo
git中,包含一个manifest文件,基本上是所有仓库git及其分支的列表。-b
仅与repo init
期间的repo
git相关。下面是
.repo/manifests/default.xml
的例子:字符串
即清单,它将包含SHA(或标签,如果它们存在的话,实际上是相同的)而不是分支名称。这样,仓库中的每个git项目都会指向一些提交,这些提交在manifest文件中指定:
型
正如您所看到的,这两个清单之间的唯一区别是仓库git的版本号。
简答:
您需要获取特定构建的
manifest_static.xml
。或者,如果你只是缺少一些项目的git,那么你可以在
.repo
git中创建local_manifest.xml
文件,在那里添加缺少的git,然后从仓库的根目录中添加repo sync
。关于local_manifest.xml
的更多信息在这里。vuktfyat3#
我没有足够的权力发表评论,但我只是想澄清安德烈·凯尼科夫的回答。
Repo除了接受分支引用作为-b选项的参数外,还接受commit-id SHA。
正如答案所暗示的,这个参数指定了repo应该使用的清单的修订版本,而不是清单引用的任何项目中的修订版本。
5t7ly7z54#
.repo/manifests/
字符串
确保在copy-repo中将静态清单复制到
.repo/manifests/
目录中,并仅通过repo sync
中的文件名引用。yxyvkwin5#
我不明白@Andrejs Cainikovs的回答-你可以指定一个分支名称或SHA到
repo
,它工作得很好。-b
参数可以接受分支名称、标记(参见@Renaud Mathieu的回答)或SHA。我认为他所说的是能够在命令行上指定清单本身。你不能这样做,但是你可以通过使用本地清单来覆盖现有清单-参见https://stackoverflow.com/a/75016579/264822。我在这里复制了这个例子:
字符串