ren*_*zoe 5 git android github repository cyanogenmod
我正在为Nexus S手机(三星crespo)构建Cyanogenmod 9(Android ICS)系统.问题是,如果我这样做:
repo init -u git://github.com/CyanogenMod/android.git -b ics
Run Code Online (Sandbox Code Playgroud)
回购最新提交的ICS,其中清单不包括我需要的一些设备/三星/项目(特别是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.
提前致谢.
答案很长:
您不能指定分支名称(或SHA,或其他任何)repo,它将无法工作.原因如下:
repo是一个处理存储库项目集合的脚本(实际上它是独立的git).项目列表位于.repogit中,并包含一个清单文件,它基本上是所有存储库git和它们分支的列表.-b仅适用于repogit期间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>
Run Code Online (Sandbox Code Playgroud)
因此,获取特定构建的存储库源的正确方法是获取它的清单.
即,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>
Run Code Online (Sandbox Code Playgroud)
如您所见,这两个清单之间的唯一区别是存储库git的修订值.
简短回答:
您需要获取manifest_static.xml特定的构建.
或者,如果你只是缺少一些项目git,那么你可以local_manifest.xml在.repogit中创建文件,在那里添加缺少的git,然后repo sync从你的存储库的根目录添加.有关local_manifest.xml使用的更多信息在这里.
我想到了。如果清单文件中有标签(例如version.xml)。您可以使用以下命令将init初始化为特定标签:
repo init -u <addres> -b refs/tags/<tagname> -m version.xml
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12728 次 |
| 最近记录: |