google官方讲述代码获取的说明文档路径如下:https://fuchsia.googlesource.com/docs/+/ea2fce2874556205204d3ef70c60e25074dc7ffd/development/source_code/README.md。使用如下以curl开始的命令组合,最后部分的layer可以指定为topaz、peridot和garnet,或者指定仅下载操作系统代码zircon。

$ curl -s "https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT" | base64 --decode | bash -s <layer>

为方便起见,此处不指定layer参数,下载全部的fuchsia代码。所需时间与网速有很大关系,没有做计算,我是晚上开始下载,第二天早起看已经下载完成。

$ curl -s "https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT" | base64 --decode | bash
~/fuchsia/.jiri_root/bin ~
cipd bootstrapped to path:"/home/kai/fuchsia/.jiri_root/bin/cipd"
~
Please add /home/kai/fuchsia/.jiri_root/bin to your PATHUpdating all projects
Done creating a Platform Source Tree at "/home/kai/fuchsia".
Recommended: export PATH="/home/kai/fuchsia/.jiri_root/bin:$PATH"

首先curl命令下载网址https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT中的文件,也可以在浏览器中输入此网址,通过浏览器进行下载,文件名为bootstrap.txt,其内容为base64编码。以下通过curl命令下载,内容打印在终端上(内容有省略):

$ curl  "https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT"
IyEvYmluL2Jhc2gKIyBDb3B5cmlnaHQgMjAxNyBUaGUgRnVjaHNpYSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgojIFVzZSBvZiB0........
$ 

使用工具base64解码bootstrap.txt文件,解码之后为bash脚本文件,内容如下(省略了一些非关键内容)。由脚本中的注释可知,其将下载一个新的名称为bootstrap_jiri.txt的脚本,由新脚本完成fuchsia目录的创建,以及下载jiri工具到目录"fuchsia/.jiri_root/bin"中。jiri工具可同时管理多个git代码仓库,包括同步、代码恢复等功能,Fuchsia正是使用jiri管理其代码仓库。

关于bootstrap_jiri.txt脚本稍后介绍。

$ cat bootstrap.txt | base64 --decode
#!/bin/bash# The fetched script will
# - create "fuchsia" directory if it does not exist,
# - download "jiri" command to "fuchsia/.jiri_root/bin"
curl -s "https://fuchsia.googlesource.com/jiri/+/master/scripts/bootstrap_jiri?format=TEXT" | base64 --decode | bash -s fuchsia
cd fuchsia.jiri_root/bin/jiri import -name=integration flower https://fuchsia.googlesource.com/integration
.jiri_root/bin/jiri override fuchsia https://fuchsia.googlesource.com/fuchsia
.jiri_root/bin/jiri updateecho "Done creating a Platform Source Tree at \"$(pwd)\"."
echo "Recommended: export PATH=\"$(pwd)/.jiri_root/bin:\$PATH\""

之后,使用jiri命令在fuchsia目录下创建其manifest文件 .jiri_manifest。其内容如下。jiri update命令执行时,将同步manifest文件中指定的工程(代码仓库)。此处显式指定了一个工程project,名称为fuchsia,代码仓库地址为:"https://fuchsia.googlesource.com/fuchsia",并且其使用了overrides标签,意味着其将替换已有同名的工程,仅在根manifest文件中允许此标签。

~/fuchsia$ cat .jiri_manifest
<manifest><imports><import manifest="flower" name="integration" remote="https://fuchsia.googlesource.com/integration"/></imports><overrides><project name="fuchsia" remote="https://fuchsia.googlesource.com/fuchsia"/></overrides>
</manifest>
~/fuchsia$ 

另外,在文件中引入了另外一个manifest文件,其仓库地址为"https://fuchsia.googlesource.com/integration",下载之后,内容如下:

~/fuchsia$ cat integration/flower
<?xml version="1.0" encoding="UTF-8"?>
<manifest><imports><localimport file="minimal"/><localimport file="stem"/><localimport file="third_party/flower"/><localimport file="topaz/minimal"/><localimport file="topaz/third_party"/></imports><projects><project name="experiences"path="src/experiences"remote="https://fuchsia.googlesource.com/experiences"gerrithost="https://fuchsia-review.googlesource.com"revision="ceff64f9c1475b5d1ca028a05f638278913ae63a"/></projects>
</manifest>
~/fuchsia$ 

在此仓库中,有已下载的manifest文件:minimal、stem、third_party/flower、topaz/minimal和topaz/third_party。如下所以。由于manifest文件的嵌套,最终,会包含非常多的project(代码仓库)进来。

~/fuchsia$ ls integration/
flower  garnet  infra  jiri.lock  minimal  peridot  prebuilts  README.md  stem  third_party  topaz  zircon
~/fuchsia$ 

可使用如下的jiri project命令查看包含的工程情况。如下fuchsia总共包含有182个代码仓库。

~/fuchsia$ .jiri_root/bin/jiri project
* project canonical-json-goPath:     /home/kai/fuchsia/third_party/golibs/github.com/tent/canonical-json-goRemote:   https://fuchsia.googlesource.com/third_party/canonical-json-goRevision: 96e4ba3a7613a1216cbd1badca4efe382adea337Branches: none
* project cobaltPath:     /home/kai/fuchsia/third_party/cobaltRemote:   https://fuchsia.googlesource.com/cobaltRevision: 83d0db4528c0a36b14d54f34d7dbbd516c1184b0Branches: none...
~/fuchsia$
~/fuchsia$ .jiri_root/bin/jiri project | grep project | wc -l
182
~/fuchsia$ 

最后,运行jiri update命令,同步所有指定的代码仓库。

来看一下bootstrap_jiri.txt脚本的功能。如下curl命令获取其内容,使用base64工具解码。有文件注释可知,此脚本将创建fuchsia目录,以及其下子目录.jiri_root和.jiri_root/bin/jiri命令二进制执行文件。jiri自身的代码仓库位于地址:https://fuchsia.googlesource.com/jiri。

$ curl -s https://fuchsia.googlesource.com/jiri/+/master/scripts/bootstrap_jiri?format=TEXT | base64 --decode
$
#!/usr/bin/env bash# bootstrap_jiri initializes a root directory for jiri.  The following
# directories and files will be created:
#   <root_dir>                         - root directory (picked by user)
#   <root_dir>/.jiri_root              - root metadata directory
#   <root_dir>/.jiri_root/bin/jiri     - jiri binary
#
# The jiri sources are downloaded and built into a temp directory, which is
# always deleted when this script finishes.  The <root_dir> is deleted on any
# failure.set -euf -o pipefail# Jiri repo, from which we will download the jiri script wrapper.
readonly JIRI_REPO_URL="https://fuchsia.googlesource.com/jiri"# Google Storage bucket that contains prebuilt versions of jiri.
readonly GS_BUCKET_URL="https://fuchsia-build.storage.googleapis.com/jiri"

以下脚本内容,使用uname命令获取本机的ARCH处理器架构,由于使用的为intel处理器,uname -m命令的输出为x86_64,ARCH赋值为amd64。并且使用mkdir命令创建bin目录,由于指定了-p选项,连带的将根目录fuchsia和其子目录.jiri_root创建了出来。

readonly HOST_ARCH=$(uname -m)
if [ "$HOST_ARCH" == "aarch64" ]; thenreadonly ARCH="arm64"
elif [ "$HOST_ARCH" == "x86_64" ]; thenreadonly ARCH="amd64"
elseecho "Arch not supported: $HOST_ARCH"exit 1
fi# toabs converts the possibly relative argument into an absolute path.  Run in a
# subshell to avoid changing the caller's working directory.
toabs() (cd $(dirname $1)echo ${PWD}/$(basename $1)
)readonly ROOT_DIR="$(toabs $1)"
readonly BIN_DIR="${ROOT_DIR}/.jiri_root/bin"mkdir -p "${BIN_DIR}"

其中,由于使用的是Ubuntu系统,HOST_OS的值为linux,所以TARGET变量为linux-amd64。首先使用curl命令获取jiri代码仓库的最新提交commit ID版本号,但是随后并没有使用此版本号。之后使用curl获取jiri代码仓库的提交日志信息,此次将获取到一个版本号数组(每次提交commit将产生一个commit id版本)。最后,循环遍历VERSIONS数组中的每个版本号,与TARGET和GS_BUCKET_URL变量值(即预编译的jiri工具的保存路径)组合为一个URL,使用curl检查此url是否存在。存在的话,将jiri二进制文件下载到目录"${BIN_DIR}/jiri"中。

# Determine and validate the version of jiri.
readonly HOST_OS=$(uname | tr '[:upper:]' '[:lower:]')
readonly TARGET="${HOST_OS}-${ARCH}"
readonly COMMIT_URL="${JIRI_REPO_URL}/+refs/heads/master?format=JSON"
readonly LOG_URL="${JIRI_REPO_URL}/+log/refs/heads/master?format=JSON"
readonly VERSION=$(curl -sSf "${COMMIT_URL}" | sed -n 's/.*"value": "\([0-9a-f]\{40\}\)"/\1/p')
readonly VERSIONS=$(curl -sSf "${LOG_URL}" | sed -n 's/.*"commit": "\([0-9a-f]\{40\}\)".*/\1/p')JIRI_URL=""
for version in ${VERSIONS}; dourl="${GS_BUCKET_URL}/${TARGET}/${version}"if curl --output /dev/null --silent --head --fail "${url}"; then
100  5004    0  5004    0     0    574      0 --:--:--  0:00:08 --:--:--  1195
}"breakfi
doneif ! curl -sf -o "${BIN_DIR}/jiri" "${JIRI_URL}"; thenecho "Failed downloading prebuilt Jiri binary." 1>&2exit 1
fi
chmod 755 "${BIN_DIR}/jiri"

例如JIRI_URL=https://fuchsia-build.storage.googleapis.com/jiri/linux-amd64/e0c5efcc7081e09845f3f17944fceb6ff179b981。最后,使用命令jiri bootstrap cipd下载cipd二进制程序。

# Install cipd, which is frequently needed to use manifests.
pushd "${BIN_DIR}"
if ! "${BIN_DIR}/jiri" bootstrap cipd; thenecho "Running jiri bootstrap failed." 1>&2popdexit 1
fi
popdecho "Please add ${BIN_DIR} to your PATH"trap - EXIT
$ 

END

fuchsia代码管理相关推荐

  1. 代码管理和版本管理的作业流程以及规范是怎样的?

    代码管理和版本管理的作业流程以及规范是怎样的? 代码管理和版本管理的作业流程以及规范是怎样的?下面以文档的形式进行详细分析,希望能够给予测试人员一些帮助和指导. 本文目的 本文试图提供一套有效进行代码 ...

  2. 为何Google、微软、华为将亿级源代码放一个仓库?从全球最大代码管理库说起...

    作者 | 夕颜 编辑 | Just 出品 | AI 科技大本营(ID:rgznai100) [导读]2017 年,在当时微软的一篇官方博客中,时任微软云开发服务副总裁的 Brian Harry 表示微 ...

  3. 代码管理规范_微服务架构下代码管理规范

    当下对于代码的管理,主要采用GitLab或GitHub,然而使用git进行代码管理过程中,一般有四种开发模式,分别为主干开发主干发布,主干开发分支发布,分支开发主干发布,分支开发分支发布.四种开发模式 ...

  4. 代码管理之SVN服务器及Git的创建与使用

    ---恢复内容开始--- SVN和Git的都是用于项目配置项管理的工具,区别很大,各有千秋.但他们之间的区别并非今天我要谈论的重点,因为这些有很多成熟的文章博客介绍.所以今天我主要是介绍一些SVN和G ...

  5. 在Windows Server 2008上部署SVN代码管理总结

    这段时间在公司开发Flex程序,所以使用TortoiseSVN作为团队代码管理器,今天在公司服务器上部署SVN服务器,并实验成功,总结如下: 服务器环境: 操作系统:Windows Server 20 ...

  6. 使用Git进行代码管理的心得

    注册GitHub账号 要使用GitHub进行代码管理.首先,需要一个GitHub的账户. 登录GitHub.com进行注册. 根据实践课上学长的指导,或参考他的blog来继续创建Organizatio ...

  7. 代码管理工具 Git

    之前一直使用微软的代码管理工具TFS(Team Foundation Server)..NET CORE 2.0的发布后,考虑到.NET CORE项目可以跨平台,准备把项目迁移到.NET CORE 环 ...

  8. IOS开发-关于代码管理工具之SVN

    最近在做的一个项目,就用到了代码管理工具,那么就对SCN进行了一个简单的了解,即原理和一些常用命令. 那么我们为什么需要使用SVN呢,我们可以吧SVN当成是一个备份服务器,他可以帮你记住每次上传到这个 ...

  9. 还在自建代码仓库?阿里云的这款企业级代码管理工具免费、还香!

    简介:代码托管产品是软件研发过程中的必备工具,不少企业在进行代码托管工具选型的时候会选择开源工具自建,然而,开源版本的代码管理工具往往只是提供了基础的代码仓储能力,无法满足企业在安全性.代码质量.权限 ...

最新文章

  1. Java Json API:Gson使用简单入门
  2. 半平面交比较好的博客
  3. java pdf中文乱码_java转pdf(html转为pdf),解决中文乱码,标签不规范等问题
  4. 计量经济学第六版计算机答案,伍德里奇计量经济学导论计算机习题第六章第13题c_6.13...
  5. mysql 5.6.17 x64 安装
  6. 西瓜书《机器学习》线性模型 一元线性回归公式推导
  7. parseInt原来是这样用的
  8. 2018 CodeM初赛B轮:D.神奇盘子
  9. DataGridView使用技巧二:设置单元格只读
  10. Python_把csv文件导入数据库
  11. Matlab仿真两种方法求圆周率π
  12. pdf24是什么软件 | pdf24 tools(PDF24工具箱)官方中文版V10.7.1 | pdf24tools下载
  13. HTML制作菜鸟教程网站首页
  14. 【Java类的封装性】封装的日期类。Person类,使用对象作为成员变量并实现深拷贝。(利用了类的封装性)
  15. 使用Python构造数据包
  16. 今天将网易博客的内容迁过来
  17. win11运行gnuplot报错:This application failed to start because no Ot platform plugin could be initialized
  18. 简历模板...自行下载
  19. 在线随机密码生成器源码
  20. 忽尔今夏,SpringSide 3.0

热门文章

  1. 学习 Linux 有哪些好处?
  2. centos 6.2 bind dlz mysql 驱动,bind9 dlz mysql 配置 – daemon
  3. 扫宽、分辨率和扫描时间
  4. Hadoop 容错之1.X的单点故障 到 2.X的HA和HDFS Federation
  5. Windows配置环境变量
  6. 魔兽争霸英雄属性全揭秘
  7. 【单调栈】zjoj p1859子序列累加和
  8. 医学生学计算机建议,医学生计算机能力的培养
  9. 2022年煤矿探放水题库及模拟考试
  10. MySql格式化小数保留小数点后两位