一.init初始化
$ repo init -u <URL> [<OPTIONS>]
示例
repo init -u ssh://gerrit-sh.noboauto.com:29418/qcom/es17/manifest -b release/gwm_v35_tank
首先当前目录产生一个.repo目录
然后克隆一份repo的源代码到.repo/repo下,里面存放了其他repo子命令,即repo的主体部分。
接着从manifest_git_path仓库地址clone清单库到.repo/manifests和.repo/manifests.git目录。
同时.repo目录下还包括manifest仓库(清单库)内容
1.1 .repo/ 文件夹
huyiwen@460f67ae8ef4:~/code_tank$ cd .repo/
huyiwen@460f67ae8ef4:~/code_tank/.repo$ ls
gdcmanfiests manifests manifests.git manifest.xml repo
- repo/manifests.git:此为repo配置信息的git库,不同版本包含不同配置信息
- repo/manifests:此为repo配置信息的工作目录(将配置信息的工作目录和相应的实际git目录分离管理,并且配置信息中的.git目录实际只是指向实际git库的软连接),其中可能包含一个或多个xml文件描述的配置。每个xml文件是独立的一套配置,配置内容包括当前repo工作目录包含哪些git项目、所有git项目所处的默认公共分支、以及远端地址等。
- repo/manifest.xml:repo工作目录中的内容同一时刻只能采用manifests中的一个xml文件做为其配置,该文件就是其软连接,通过init的-m选项指定采用哪个文件;另外,同一xml文件也可能处于manifests库的不同版本或者不同分支,通过init的-b选项指定使用manifests中的哪个分支,每次init命令都会从服务器更新最新的配置。这里通过-m指定的manifests中的xml文件中
- repo/repo:此为repo脚本集的git库,用于repo管理所需的各种脚本,repo的所有子命令就是其中的对应脚本实现。该脚本也通过git管理,.repo/repo/.git为对应的git目录。这里包含repo命令所需的所有子命令脚本实现,由python完成
1.2 选项:
- -u: 指定manifest仓库地址
- -m: 选择仓库中某个manifest文件,如果没有设置,就使用default.xml
- -b: 指定一个分支或修正版本
二.sync 同步项目文件
repo sync [project-list]
示例:
huyiwen@460f67ae8ef4:~/code_tank/.repo/manifests$ cd ..
huyiwen@460f67ae8ef4:~/code_tank/.repo$ cd ..
huyiwen@460f67ae8ef4:~/code_tank$ repo sync -c --no-tags
下载新的更改并更新本地环境中的工作文件。如果在未使用任何参数的情况下运行 repo sync,则该操作会同步所有项目的文件。
运行 repo sync 后,将出现以下情况:
- 如果目标项目从未同步过,则 repo sync 相当于 git clone。远程代码库中的所有分支都会复制到本地项目目录中。
- 如果目标项目以前同步过,则 repo sync 相当于以下命令:
- git remote update
- git rebase origin/branch
- 其中 branch
branch 是本地项目目录中当前已检出的分支。如果本地分支没有在跟踪远程代码库中的分支,则相应项目不会发生任何同步。
如果 git rebase 操作导致合并冲突,使用常规 Git 命令(例如 git rebase --continue)来解决冲突。
当冲突出现时,只需要解决完冲突,然后执行git rebase --continue即可。
repo sync 运行成功后,指定项目中的代码即处于最新状态,已与远程代码库中的代码同步。
选项:
-j:开启多线程同步操作,这会加快sync命令的执行速度,过多会起反作用。默认情况下,使用4个线程并发进行sync
-c : –current-branch:只同步指定的远程分支。默认情况下,sync会同步所有的远程分支,当远程分支比较多的时候,下载的代码量就大。使用该参数,可以缩减下载时间,节省本地磁盘空间
--no -tags 不下载标签信息,可以加快下载时间
-d : –detach:脱离当前的本地分支,切换到manifest.xml中设定的分支。在实际操作中,这个参数很有用,当我们第一次sync完代码后,往往会切换到dev分支进行开发。如果不带该参数使用sync, 则会触发本地的dev分支与manifest设定的远程分支进行合并,这会很可能会导致sync失败
-f : –force-broken:当有git库sync失败了,不中断整个同步操作,继续同步其他的git库