Git、Gerrit、Repo三者的区别及使用
Git、Gerrit、Repo三者的概念及使用
三者各自作用:
- git:版本管理库,在git库中没有中心服务器的概念,真正的分布式。
- repo:repo就是多个git库的管理工具。如果是多个git库同时管理,可以使用repo。当然使用gerrit,就必须用repo。
- gerrit:提交审核代码,图形化的界面,简单的操作
使用三者管理代码流程
- repo init xxx初始化
- repo sync xxx同步要改动的项目
- 在该项目下面repo start xxx新建一个本地分支
- 做好改动以后git commit本地提交改动
- repo upload xxx将改动上传,等别人通过gerrit review
- review如果有需要改动的地方,那本地改好后,git commit --amend来保存新的修改
- repo upload 将新的改动上传
- 重复5-7步,直到review通过,然后merge改动,完毕
Git 基础操作
git add 文件名
将当前更改或者新增的文件加入到Git的索引中eg:
git add readme.txt
git commit
提交当前工作空间的修改内容,,提交的时候必须用-m来输入一条提交信息eg:
git commit -m "add model"
git status
仓库当前的状态eg :
git status
git diff
命令- eg:
git diff
比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异,即修改之后还没有暂存起来的变化内容。 - eg:
git diff master..test
显示两个分支间的差异 - eg :
git diff master...test
‘master’,‘test’的共有 父分支和’test’分支之间的差异 - eg:
git diff --stat
统计那些文件被改动
- eg:
git log
显示最近提交日志eg:
git log
如果需要一行显示git log --pretty=oneline
git reset
版本回退eg:
git reset --hard HEAD~X
会退到之前X版本如果回退之后还想回来,可以使用
eg:
git reset --hard "commit ID"
ID可以使用
eg:
git reflog
查看历史命令获得IDgit checkout -- file
丢弃工作区修改,撤销修改到最近一次git commit
orgit add
,即用版本库里的版本替换工作区的版本eg:
git checkout -- readme.txt
注:不要遗忘 –git rm
删除版本库中文件eg:
git rm
删除本地版本库文件,再使用git commit
提交git checkout -b "xxx"
创建一个分支eg:
git checkout -b dev
创建dev分支并切换到dev分支,相当于
git branch dev
创建dev分支
git checkout dev
切换到dev分支
git branch -d dev
删除dev分支
git checkout . ``#本地所有修改的。没有的提交的,都返回到原来的状态
git branch
命令会列出所有分支,并在当前分支上标*
git merge
合并指定分支到当前分支eg:
git merge dev
把dev分支合并到master分支上git log --graph
可以看到分支合并图,如果git无法合并,必须先解决冲突才能提交。git stash
储藏当前工作现场,创建新分支修改紧急任务git stash
隐藏当前工作区git checkout master
切换到master分支git checkout -b issue
新建分支解决完,并提交后
git checkout dev
切回到以前工作分支git stash list
查看隐藏工作区git stash pop
恢复当前储藏的工作区添加新功能最好新建feature分支,在上面开发,合并
git pull
从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地eg:
git pull origin master
origin版本库的代码更新到本地的master主枝git push
:将本地commit的代码更新到远程版本库中eg:
git push origin git push localbranch master:refs/for/master
将本地的代码更新到orgin的远程版本库中git checkout HEAD <some file> [<some file>]
,清除工作目录树中的修改
打补丁
将commit打包成patch
修改代码
$ vi drivers/bluetooth/btusb.c
把代码添加到git管理仓库
git add .
提交修改
git commit -m "some message"
查看日志,获取到hash
git log
生成patch
git format-patch -s 1bbe3c8c19
或者–
git format-patch HEAD^
# 最近的1次commit的patch
测试,应用patch
检查patch文件
git apply --stat xxx.patch
查看是否能应用成功
git apply --check xxx.patch
应用patch
git am xxx.patch
注:1. 之前应,
git am -abort
放弃之前am信息, 有可能会遇到 .git/rebase-apply still exists but mbox given
修改以及commit并且以及push的描述
修改最近一次的commit
git commit --amend
修改commit历史,
git rebase -i HEAD~X
orgit rebase -i (commit -id)
接着会出现pick:*******
pick:*******
pick:*******
ls将pick改为edit就可以修改,利用`git commit --amend命令
最后
git rebase --continue
搞定如果需要删除已经push的可以将pick改为drop
Repo
repo担任角色
- 和主代码服务器交互
- 用manifest.xml管理多个git仓库
repo init -u url -b branchname
初始化命令,主要干两件事- 在当前目录里面下载安装 repo,因为最初从网上下载的那个 repo 文件并不是一个完整的 repo,它主要负责初始化工作,并且在初始化完成以后将命令移交给完整的 repo 来执行
- 根据命令中指定的地址(-u url)去下载项目的管理文件 manifest.xml ,这里 -b branchname 就是指的 manifest.xml 的相应 branch
repo sync
同步所有项目repo sync project
主要干的事情是- 同步 .repo/manifests/,再根据最新的manifest.xml来执行操作
- 找到想要下载项目,然后下载项目
repo start branch project
如果希望这个 branch 是被 repo 管理起来的,那么我们就要使用
repo start
命令来新建一个 branch。比如这个 branch 改好了后,你是需要上传到 gerrit 进行 review,那么就该使用
repo start
。如果只是一个临时实验性的分支的话,就无所谓了。但是使用
repo start
也不会有什么坏处,所以放心的使用。如果创建失败,可以使用 repo start branch project --all
删除 branch 的时候,依然是使用
git branch -d branchname
repo upload project
当准备好一个 commit 以后,就需要把这个改动传到 gerrit 上面等待别人 review,就需要用到
repo upload
,如果branch不是repo start
创建,就必须使用repo start
创建新的branch,再使用git cherry-pick commitd
把刚才改动好的拿到repo创建的分支repo forall -c git reset --hard HEAD
repo forall -p =c git branch
repo branches
查看当前有多少分支
Gerrit
Review流程
- 上传代码
- reviewer review 当change +2 就可以merge ,但是在+2之前,先有普通reviewer查看+1,以减轻主reviewer负担
- verify:可以人工完成,也可以用自动化工具,如自动化编译,自动化测试
- merge:通过review之后,就可以merge change,保存到中心代码仓库。如果代码有冲突,需要手动处理再重新上传
从 gerrit 上面下载一个正在 review 的 change
有时候,需要将一个还没有merge 的 change 下载下来,这时,可以到一个 change 的页面,里面有 download 的地方,里面有很多下载选项。其中 cherry-pick 是比较常用的方式,你选了下载方式后,gerrit 会智能的生成相应的命令,只需要复制下来,然后在项目目录下面执行这个命令就可以了。
比较不同的 patch set
每个 change 通常需要重复“review - 改代码 - 上传新 patch”多次才能最终完成,每一次上传就称为一个 patch。gerrit 会方便的把你的改动内容列出来方便 review,而且你还可以选择比较不同的 patch set,在一个change 的页面,仔细看看还是比较容易找到地方。
查找 change
gerrit 在页面右上角有一个搜索框,通过搜索匹配,你可以找到你想要的 change。比如 owner,project,status,branch 等等。比如:
status:open project:xxx
owener:"xxxxx
安卓原生编译
source ./build/envsetup.sh
or`. ./build/envsetup.sh```- ```lunch`
make ...
- 快捷方式
- croot:用于改变当前路径到Android根目录。
- m:用于从Android根目录开始编译。
- mm:用于编译当前目录下的所有模块。
- mmm:用于编译特定目录下的所有模块。
- cgrep:用于在C/C++文件中查找。
- jgrep:用于在Java文件中查找。
- resgrep:用于在资源文件中查找。
- godir:用于跳转到某个目录。
Git、Gerrit、Repo三者的区别及使用相关推荐
- 构建git+gerrit+repo的Android代码服务器
谷歌的Android源码是基于Git+Repo管理的,官方推荐的代码管理也是git+gerrit+repo.谷歌自己都在用的东西,各种优点,各种强大就不用说了,你懂的.关于它们的介绍可查阅极客学院的W ...
- git(4)---Git、Repo、Gerrit三者的区别
Git.Repo.Gerrit三者的区别 Git作为一个分布式版本控制工具,可以创建分支,切换分支,方便协作,git pull/push: --但是对于类似于android如此庞大的项目,只用git库 ...
- Git和Repo管理使用简要介绍
在Linux平台下进行Android系统项目开发时,需要git或repo管理. 一. Git和Repo的区别: 1. Git:Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的 ...
- git与repo与scp
git与repo与scp Ubuntu下git的安装与使用 安装 使用 git生成patch和打patch 生成patch 应用patch 打patch发生冲突 git分支 这些是各种场合常见的 Gi ...
- #39;git pull#39;和#39;git fetch#39;有什么区别?
主持人注意:鉴于此问题已经发布了67个答案 (其中一些已删除),请在发布另一个问题之前考虑您是否正在贡献新内容 . git pull和git fetch什么区别? #1楼 我花了一点时间来了解有什么区 ...
- git(5)---Git 与Repo 管理Android代码
Git 与Repo 管理代码 要处理 Android 代码,您需要同时使用 Git 和 Repo.在大多数情况下,您可以仅使用 Git(不必使用 Repo),或结合使用 Repo 和 Git 命令以组 ...
- python anaconda和pycharm_Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项...
原博文 2020-04-03 09:20 − Python .Pycharm.Anaconda三者的区别与联系.安装过程及注意事项 这篇文章主要介绍了Python,Pycharm,Anaconda三者 ...
- 我先了解一下博客园创建随笔/文章/日记的过程与三者的区别(隐私等级,是否审核等)...
我先了解一下博客园创建随笔/文章/日记的过程与三者的区别(隐私等级,是否审核等) 转载于:https://www.cnblogs.com/Totooria-Hyperion/p/5260289.htm ...
- 学习数据科学、机器学习与AI没有多大交集,一文告诉你三者最大区别
翻译 | AI科技大本营 参与 | Shawn 编辑 | Donna [AI科技大本营导读]我们常常提及数据科学.机器学习和人工智能,也有一个整体的概念.但是,如果要清晰地说出三者的定义分别是什么,区 ...
最新文章
- 树莓派都能做脑机接口了?实时处理8个电极信号,人人用得起 | 开源
- opencv python 从摄像头获取视频、帧率、分辨率等属性设置和使用
- 课堂作业_什么是图灵测试
- rtp rtcp rtsp
- C语言高级编程:二级指针的赋值
- 【开源】Transformer 在CV领域全面开花:新出跟踪、分割、配准等总结
- 网络智能和大数据公开课Homework3 Map-Reduce编程
- 敏捷外包工程系列之四:外包与敏捷开发专访(IIOM独家专访)
- redis mysql windows_Redis+Mysql模式和内存+硬盘模式的异同
- python统计数据分析基础教程_Python数据分析基础教程:NumPy学习指南(第2版)
- 解决hibernate只能插入一条数据的问题
- eclipse关闭mysql数据库_Eclipse 连接 Mysql 数据库操作总结
- 我的世界JAVA会支持光追吗_《我的世界》RTX beta版视频体验:仿佛打破了次元壁...
- python 主函数传参数
- office2010 错误1706 解决办法
- 百度热力图颜色说明_千变万化的热力图,总有一款适合你!
- This must be due to duplicate classes or playing wrongly with class loaders
- 用【python】自做动图
- 「产品速递」消防应急照明和疏散指示系统
- 遥感专业学习神经网络与深度学习过程中的想法
热门文章
- 粗糙集matlab代码,matlab的粗糙集代码
- 灰太狼的数据世界(三)
- 个税、社保、五险一金是怎样的关系?
- 分享如何从Spring官网下载PDF文档
- 神经网络训练解决loss、validation loss(损失函数)波动或不收敛问题
- 第三次SLA文档学习
- bzoj4350 括号序列再战猪猪侠
- 面食窗口的API设计之道
- 香蕉派 android开发板,香蕉派R1之安卓体验篇
- 不可见字符​​​“​\u200b“的坑