Repo简介:
repo 是用来管理N个git仓库的工具;
它需要一个manifest.xml脚本来记录都有哪些git仓库需要一起下载下来,组成一个完整的项目.
其中每一个project都是一个git仓库的组成单元
1.manifest.xml文件格式:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch=".." name="smartisan" review="ssh://review.smartisan.cn/"/>
<remote fetch="../.." name="smartisanos" review="ssh://review.smartisan.cn/"/>
<default remote="smartisan" revision="cts/ocean-mol-6.2.0-20180702"/>
... ...
<project name="packages/apps/KeyguardSmartisan" remote="smartisanos" />
<project name="packages/apps/SystemUI" remote="smartisanos" />
<project name="packages/apps/SystemUISmartisan" remote="smartisanos" />
<project name="platform/packages/apps/Launcher2" path="packages/apps/Launcher2" />
<project name="platform/packages/apps/Launcher3" path="packages/apps/Launcher3" />
... ...
</manifest>
- 一个manifest.xml 文件中可以有多个“remote”,每个 remote 有各自的名字(name 属性),通过各自的 fetch 属性给出了相应的 project git remote URL 的计算方法。
- 其中有一个 remote 和 revision 默认值设置
<default remote="XXX" revision="YYY"/>
- 每个 project 都可以指定 remote(如果没有指定就采用前面的 default remote)和 revision(如果没有指定则采用 default revision)(revision 一般是一个分支的名字,但也可以是某个 git commit 的 hash,尤其是在 manifest 快照中)
- 每个project指定了name属性或者patch属性,如果只指定了一个,则另一个取相同的值
其中 path 属性决定代码同步下来之后,该 project 在文件系统中的路径
name 属性与该 project 的 remote 属性(及 xml 中该 remote 的 fetch 属性)相结合,确定出该项目的远程服务器 URL
2. 常用命令:
1.在运行正确的repo init命令之后,如在相应工程名称的目录下执行如下命令:
repo init -u ssh://smartisan/qualcomm/platform/manifest.git -b sanfrancisco -m cts/ocean-mol-6.2.0-20180702.xml --repo-url ssh://smartisan/googlesource/git-repo --reference /home/ylxing/src/android-mirror/ --depth 1 -g all,-notdefault,sos
即可在当前目录下初始化一个.repo文件夹
然后可以一次性同步全仓代码:repo sync -j4 ;
也可以直拉一个单仓的代码:repo sync packages/apps/KeyguardSmartisan
2.在修改代码前需要确保你的代码是基于服务器上最新版本:
git fetch -v smartisanos cts/ocean-mol-6.2.0-20180702 # 或者用 repo sync -n -c . git rebase smartisanos/cts/ocean-mol-6.2.0-20180702
如果 rebase 时有冲突的话,说明其他人已经进了新的代码,并且与你的改动冲突,你需要自己解冲突,有必要的话,需要与相关 patch 作者进行沟通
3.用 git diff smartisan/sfo-rom
先自己在本地做一下 review
4.push for review (注意此命令已经不能直接使用,必须先配置一下,请参考 为什么不能直接 git push review 了)
git push smartisanos HEAD:refs/for/cts/ocean-mol-6.2.0-20180702
5.打开相应的 Gerrit Review 网页,添加你的 Team Leader 或相关工程师作为 Reviewers。
如果你的 Reviewers Review 通过,那么恭喜,流程到此结束,你的代码就进了服务器了,可以去开发下一个功能、解下一个 Bug 了。
如果你的 Reviewer 们提出问题,需要你进行修改的话,进入下一个步骤:
6.在原来的提交的基础上,进行相应的改正,然后用 git commit --amend
命令再次提交。因为 --amend
参数的关系,原来的 commit message 会显示出来,你可以编辑,但是!绝对不要改 Change-Id!因为在逻辑上,你还是在解决同一个问题。
回到上面的第 2 步,重新来一遍(所以提升自己的水平,争取一遍就把 Patch 通过,格外重要;使用 gerrit-push-review 命令, 简化以上步骤,格外重要;同时,一次 Review 不过,多次 Review,格外重要——不管不顾代码质量,提上来就保证通过 Review,是给大家挖坑作死的节奏)。
这时候在第 4 步时,因为你的 Change-Id 没变,Gerrit Review 的网址也不会变,只是会生成一个新的 Patch Set。
第 5 步添加 Reviewer 可以省略,Reviewer 们会自动收到邮件通知有新的 patch set 生成。