repo init error - manifest xxx.xml not available

下载开源项目tizen-ivi源代码时,遇到了如下错误

$ mkdir /home/tizen-ivi
$ cd /home/tizen-ivi
$ repo init -u ssh://hjj@review.tizen.org:29418/scm/manifest -b tizen -m ivi.xml
...
fatal: manifest 'ivi.xml' not available
fatal: remote tizen-gerrit not defined in /home/tizen-ivi/.repo/manifests/ivi.xml

刚开始以为是ssh的问题,于是便检查了一下ssh的配置,发现ssh没有问题,那这是为什么呢?会不会是服务器的问题导致repo init故障,于是在不同的时间段多次执行了repo init,还是同样的问题。后来仔细一想,既然是ivi.xml文件的问题,那不妨看一下这个文件有什么古怪。

$ cat .repo/manifests/ivi.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <include name="_remote.xml" />
  <default revision="accepted/tizen_ivi" remote="tizen-gerrit" sync-j="4" />
  <include name="ivi/Metadata.xml" />
  <include name="ivi/prebuilt.xml" />
  <include name="ivi/projects.xml" />
</manifest>

根据错误提示,ivi.xml文件有问题,原因是remote tizen-gerrit未定义,在这文件中相关词语有两处,一处是remote="tizen-gerrit",另一处是<include name="_remote.xml" />,可以看出,ivi.xml引用了_remote.xml,会不会remote tizen-gerrit在_remote.xml中定义,而在ivi.xml引用却无效呢,看一下_remote.xml文件中的内容

$ cat .repo/manifests/_remote.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote name="tizen-gerrit" fetch="ssh://review.tizen.org/" review="https://review.tizen.org/gerrit"/>
</manifest>

果然,remote tizen-gerrit是在_remote.xml中定义的,那就把_remote.xml中的内容直接合并到ivi.xml试一下吧,而不是通过include引用,ivi.xml修改后如下:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote name="tizen-gerrit" fetch="ssh://review.tizen.org/" review="https://review.tizen.org/gerrit"/>
  <default revision="accepted/tizen_ivi" remote="tizen-gerrit" sync-j="4" />
  <include name="ivi/Metadata.xml" />
  <include name="ivi/prebuilt.xml" />
  <include name="ivi/projects.xml" />
</manifest>

修改完成之后,再执行repo init命令:

$ repo init -u ssh://hjj@review.tizen.org:29418/scm/manifest -b tizen -m ivi.xml

执行成功,^_^

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念