Git、Gerrit、Repo使用及其关系

Git、Gerrit、Repo使用

三者各自功能
  1. git,版本管理库,在git库中没有中心服务器的概念,真正的分布式。
  2. repo,repo就是多个git库的管理工具。如果是多个git库同时管理,可以使用repo。当然使用gerrit,就必须用repo。
  3. gerrit,提交审核代码,图形化的界面,简单的操作
使用三者管理代码流程
  1. repo init xxx初始化
  2. repo sync xxx同步要改动的项目
  3. 在该项目下面repo start xxx新建一个本地分支
  4. 做好改动以后git commit本地提交改动
  5. repo upload xxx将改动上传,等别人通过gerrit review
  6. review如果有需要改动的地方,那本地改好后,git commit --amend来保存新的修改
  7. repo upload 将新的改动上传
  8. 重复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 统计那些文件被改动
  • 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 查看历史命令获得ID

  • git checkout -- file 丢弃工作区修改,撤销修改到最近一次 git commit or git 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 or git rebase -i (commit -id)接着会出现

      pick:*******

      pick:*******

      pick:*******ls

      将pick改为edit就可以修改,利用`git commit --amend命令

      最后git rebase --continue 搞定

      如果需要删除已经push的可以将pick改为drop

Repo
  • repo担任角色

    1. 和主代码服务器交互
    2. 用manifest.xml管理多个git仓库
  • repo init -u url -b branchname 初始化命令,主要干两件事

    1. 在当前目录里面下载安装 repo,因为最初从网上下载的那个 repo 文件并不是一个完整的 repo,它主要负责初始化工作,并且在初始化完成以后将命令移交给完整的 repo 来执行
    2. 根据命令中指定的地址(-u url)去下载项目的管理文件 manifest.xml ,这里 -b branchname 就是指的 manifest.xml 的相应 branch
  • repo sync 同步所有项目

  • repo sync project 主要干的事情是

    1. 同步 .repo/manifests/,再根据最新的manifest.xml来执行操作
    2. 找到想要下载项目,然后下载项目
  • 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流程

    1. 上传代码
    2. reviewer review 当change +2 就可以merge ,但是在+2之前,先有普通reviewer查看+1,以减轻主reviewer负担
    3. verify:可以人工完成,也可以用自动化工具,如自动化编译,自动化测试
    4. 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

安卓原生编译
    1. source ./build/envsetup.shor`. ./build/envsetup.sh```
    2. ```lunch`
    3. make ...
  • 快捷方式
    • croot:用于改变当前路径到Android根目录。
    • m:用于从Android根目录开始编译。
    • mm:用于编译当前目录下的所有模块。
    • mmm:用于编译特定目录下的所有模块。
    • cgrep:用于在C/C++文件中查找。
    • jgrep:用于在Java文件中查找。
    • resgrep:用于在资源文件中查找。
    • godir:用于跳转到某个目录。
### 回答1: Git是一个版本控制系统,用于管理代码的版本和变更历史记录。 Repo是一个用于管理多个Git仓库的工具,它可以帮助我们在一个项目中管理多个Git仓库。 Gerrit是一个基于Git的代码审查工具,它可以帮助团队进行代码审查和管理。 因此,Git是RepoGerrit的基础,Repo可以帮助我们管理多个Git仓库,而Gerrit则是在Git基础上提供了代码审查和管理功能。 ### 回答2: Git、RepoGerrit是现代软件开发中常用的三个工具,它们分别以不同的方式协助开发人员团队协同开发代码并进行版本管理,以提高软件开发过程的效率、质量和协作性。 Git是一个分布式版本控制系统,通过追踪文件的修改历史记录,协助开发人员管理和维护代码库。Git将整个代码库克隆到本地,并允许开发人员进行分支、合并、撤销等操作来管理代码。因为是分布式的,所以多人在不同的地方进行 code review、code merge 时也很方便。 Repo是Google开发的多仓库代码管理器,它在Git上构建了一个额外的抽象层,用于管理多个Git代码库。它能够使开发人员更方便地在多个设备和分支之间同步代码,同时也提供了一些额外的工具来管理代码,如自动同步、自定义提交消息等。 Gerrit则是一个用于代码评审的工具,它通过提供集中式评审流程来协助开发人员进行代码审核和版本控制。Gerrit 通常作为 Git 代码管理系统与 GitLab、GitHub、Bitbucket 等代码托管系统间的桥梁,它作为一个独立的服务器存在,接收提交请求并提供一个 Web 界面给其他开发人员进行评审,更适合大规模项目。 为了方便多人协作,Git往往会被集成到代码管理工具(如GerritGitHub、GitLab)中。因此,开发人员可以使用一个集成了Git功能的工具在同一个代码库内进行开发和版本管理,同时集成Gerrit方便多人协作和代码评审。Repo作为多仓库代码管理器则可使开发人员更方便地同步和管理多个 Git 代码库。 总之,Git、RepoGerrit是三个有用的工具,多个工具组合使用可加快软件开发的速度、提升代码开发质量和协同效率。它们的使用需要结合具体的情况和项目需求来综合决定。 ### 回答3: Git是一个分布式版本控制系统,它的主要作用是帮助开发人员管理软件开发的历史记录和版本控制。它的主要特点是分布式、高效、可靠、灵活等。 Repo是Google开发的一个基于Git的多仓库管理工具,它可以帮助团队更好地组织和管理多个Git仓库,并提供一些便捷的操作方式。Repo可以使团队协作更为高效,避免因为Git仓库数量过多而造成的管理困难。 Gerrit是一个基于Git的代码评审工具,它主要用于开源项目的代码评审和合并。Gerrit提供一个Web界面,让团队成员可以通过Web浏览器进行代码评审和更改审核。通过Gerrit,开发人员可以更好地协同式开发,提高代码质量和工作效率。 在开发过程中,Git作为基础的版本控制系统,Repo可以帮助团队更好地管理多个Git仓库,Gerrit则是在代码评审、审核和代码合并方面提供方便和支持的工具。可以说,Git、RepoGerrit三者之间是相互补充、相互支持的关系Git提供基础的版本控制功能,Repo可以更好地管理多个Git仓库,Gerrit则提供方便的代码评审、审核和合并功能。综上所述,这三个工具在软件开发中起到了非常重要的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值