Git 与Repo 管理代码

要处理 Android 代码,您需要同时使用 Git 和 Repo。在大多数情况下,您可以仅使用 Git(不必使用 Repo),或结合使用 Repo 和 Git 命令以组成复杂的命令。不过,使用 Repo 执行基本的跨网络操作可大大简化您的工作。

Git 是一个开放源代码的版本控制系统,专用于处理分布在多个代码库上的大型项目。在 Android 环境中,我们会使用 Git 执行本地操作,例如建立本地分支、提交、查看更改、修改。打造 Android 项目所面临的挑战之一就是确定如何最好地支持外部社区 - 从业余爱好者社区到生产大众消费类设备的大型原始设备制造商 (OEM)。我们希望组件可以替换,并希望有趣的组件能够在 Android 之外自行发展。我们最初决定使用一种分布式修订版本控制系统,经过筛选,最后选中了 Git。

Repo 是我们以 Git 为基础构建的代码库管理工具。Repo 可以在必要时整合多个 Git 代码库,将相关内容上传到我们的修订版本控制系统,并自动执行 Android 开发工作流程的部分环节。Repo 并非用来取代 Git,只是为了让您在 Android 环境中更轻松地使用 Git。Repo 命令是一段可执行的 Python 脚本,您可以将其放在路径中的任何位置。使用 Android 源代码文件时,您可以使用 Repo 执行跨网络操作。例如,您可以借助单个 Repo 命令,将文件从多个代码库下载到本地工作目录。

Gerrit 是一个基于网页的代码审核系统,适用于使用 Git 的项目。Gerrit 允许所有授权用户提交更改(如果通过代码审核,这些更改会自动纳入项目中),以此鼓励他们更集中地使用 Git。此外,Gerrit 可以在浏览器中并排显示更改,并支持代码内注释,使得审核工作变得更轻松。

Android Studio 是用于开发 Android 应用的官方集成开发环境 (IDE)。如需了解详情,请参阅 Android Studio 概览。

基本工作流程

图 1. Android 基本工作流程

与代码库进行交互的基本模式如下:

  1. 使用 repo start 新建一个主题分支。

  2. 修改文件。

  3. 使用 git add 暂存更改。

  4. 使用 git commit 提交更改。

  5. 使用 repo upload 将更改上传到审核服务器。

任务参考

以下任务列表简要总结了如何执行常见的 Repo 和 Git 任务。要了解如何使用 Repo 下载源代码,请参阅下载源代码和使用 Repo。

同步客户端

要同步所有可用项目的文件,请运行以下命令:

repo sync

要同步所选项目的文件,请运行以下命令:

repo sync PROJECT0 PROJECT1 ... PROJECTN

创建主题分支

当您开始进行更改(例如当您开始处理错误或使用新功能)时,请在本地工作环境中新建一个主题分支。主题分支不是原始文件的副本;它代表着特定提交。这样一来,您可以轻松创建本地分支并在这些分支之间切换。通过使用分支,您可以将工作的某个方面与其他方面分隔开来。请参阅分隔主题分支(一篇有关使用主题分支的趣味文章)。

要使用 Repo 新建一个主题分支,请转到要修改的项目并运行以下命令:

repo start BRANCH_NAME .

请注意,句点代表当前工作目录中的项目。要验证您的新分支是否已创建,请运行以下命令:

repo status .

使用主题分支

要将分支分配给特定项目,请运行以下命令:

repo start BRANCH_NAME PROJECT_NAME

要查看所有项目的列表,请访问 android.googlesource.com。再次提醒,如果您已转到特定的项目目录,可以简单地使用一个句点来表示当前项目。

要切换到您已在本地工作环境中创建的另一个分支,请运行以下命令:

git checkout BRANCH_NAME

要查看现有分支的列表,请运行以下命令:

git branch

repo branches

当前分支的名称前面将标注星号。

注意:如果存在错误,可能会导致 repo sync 重置本地主题分支。如果在您运行 repo sync 之后,git branch 显示 *(无分支),请再次运行 git checkout

暂存文件

默认情况下,Git 会检测到您在项目中所做的更改,但不会跟踪这些更改。要让 Git 保存您的更改,您必须将更改标记为包含在提交中。这也称为“暂存”。

您可以通过运行以下命令来暂存更改:

git add

对于此命令,项目目录中的任何文件或目录都可作为参数。git add 并不像其名称表示的这样只是简单地将文件添加到 Git 代码库,它还可以用于暂存文件的修改和删除的内容。

查看客户端状态

要列出文件的状态,请运行以下命令:

repo status

要查看未提交的修改,请运行以下命令:

repo diff

如果您准备立即提交,运行 repo diff 命令可让系统显示您所做的不会被提交的每一项本地修改。如果您准备立即提交,要查看将被提交的每一项修改,则需要运行 Git 命令 git diff。在运行该命令之前,请确保您已转到项目目录下:

cd ~/WORKING_DIRECTORY/PROJECT git diff --cached

提交更改

在 Git 中,提交是修订版本控制的基本单位,包含目录结构的快照以及整个项目的文件内容。在 Git 中创建提交很简单,只需输入以下命令即可:

git commit

系统会提示您使用惯用的编辑器提供一条提交消息;请为您提交到 AOSP 的所有更改都提供一条会有帮助作用的消息。如果您没有添加日志消息,提交将会终止。

将更改上传到 Gerrit

上传之前,请先更新为最新修订版本:

repo sync

然后运行以下命令:

repo upload

运行此命令后,系统会随即列出您已提交的更改,并提示您选择要上传到审核服务器的分支。如果只有一个分支,您会看到一个简单的 y/n 提示符。

恢复同步冲突

如果 repo sync 显示同步冲突,请执行以下操作:

  • 查看未合并的文件(状态代码 = U)。
  • 根据需要修改存在冲突的地方。
  • 在相关项目目录中进行更改,为相关文件运行 git add 和 git commit,然后对这些更改执行“衍合”(rebase) 命令。例如:

    git add . git commit git rebase --continue

  • 当衍合完成后,再一次开始整个同步过程:

    repo sync PROJECT0 PROJECT1 ... PROJECTN

清理您的客户端文件

要在更改合并到 Gerrit 中后更新您的本地工作目录,请运行以下命令:

repo sync

要安全移除已过时的主题分支,请运行以下命令:

repo prune

删除客户端

由于所有状态信息都会存储在客户端中,您只需从文件系统中删除相应目录即可:

rm -rf WORKING_DIRECTORY

删除客户端将永久删除您尚未上传以供审核的任何更改。

Git 和 Repo 快速参考表

图 2. 基本 Git 和 Repo 命令

git(5)---Git 与Repo 管理Android代码相关推荐

  1. 构建git+gerrit+repo的Android代码服务器

    谷歌的Android源码是基于Git+Repo管理的,官方推荐的代码管理也是git+gerrit+repo.谷歌自己都在用的东西,各种优点,各种强大就不用说了,你懂的.关于它们的介绍可查阅极客学院的W ...

  2. repo+manifests+git方式管理安卓代码

    repo+manifests+git方式管理安卓代码 1.repo的获取 repo只是google用Python脚本写的调用git的一个脚本,主要是用来下载.管理Android项目的软件仓库.(也就是 ...

  3. Windows环境下通过Git来管理自己的Android代码

    前面已经介绍了在Windows下使用git工具来下载Android的源代码,Windows环境下通过Git得到Android源代码,这里记录我使用git工具来管理我自己的代码,git是一种分布式的项目 ...

  4. Git和Repo管理使用简要介绍

    在Linux平台下进行Android系统项目开发时,需要git或repo管理. 一. Git和Repo的区别: 1. Git:Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的 ...

  5. git-svn:通过git来管理svn代码

    简介 svn和git都是常用的版本管理软件,但是git无论在理念或是功能上都比svn更为先进.但是有的公司是以svn作为中央仓库,这时git与svn代码的同步就可以通过 git-svn这个软件进行,从 ...

  6. Git 代码管理(代码提交和代码回退)

    Git 代码管理(代码提交和代码回退) Git的主要功能是代码管理,版本管理,分支管理. 在远程代码管理平台上,项目的代码被管理在一个远程代码仓库中,在本地,代码保存在一个本地代码仓库中.通过Git, ...

  7. git pull git add git commit git branch git更新代码git提交git分支管理

    常用git命令整理 1. 拉取最新代码 2. 提交代码 3. 分支管理 3.1 查看所有分支(包括本地分支和远程分支) 3.2 查看远程所有分支 3.3 追踪远程分支 4. 强制用远程代码覆盖本地代码 ...

  8. 使用Git来管理svn代码

    背景简介 项目基于svn进行版本控制,trunk对应下一个即将上线版本A,A上线后切为分支branchA,手头要开发的几个功能对应下下个版本B,暂不能提到trunk上 此时有两种办法 在svn上建立一 ...

  9. 如何使用git等工具进行项目和项目代码管理

    一: 代码管理工具,将本地项目同步至新建的git仓库 对于一个使用过SVN, TFS, GIT等多种常用代码管理工具的开发者来说,个人还是更钟情于GIT. 其中基于git的平台又有很多,gitButk ...

最新文章

  1. 计算机算法设计与分析二--分治
  2. es6总结(一) ——开发环境
  3. 3.2 汇编语言程序设计
  4. QImage、 QPixmap、 QBitmap、 QPicture区别
  5. else应输入一个语句是什么意思_Python基础知识储备,关于if-else使用性能的一点感悟...
  6. Qt文档阅读笔记-Qt Core的官方解析
  7. ps html css 工具,认识Photoshop(PS)CSS切图必用工具
  8. 《设计模式详解》结构型模式 - 组合模式
  9. 漫画算法python版下载_用 Python 下载漫画
  10. 收音机磁棒天线4根接法_重磅彩蛋:DE1103收音机不用打磨就能用拉杆/外接天线收中波...
  11. 2016-03-15 nsfoundation 数组 字典 nsrange等
  12. .net winform 里控件的Dock属性(Dock的Z 顺序停靠)
  13. ActiveMQ 持久化
  14. kubernetes failed to start sandbox
  15. 北京项目总监市场需求
  16. 条件覆盖(Condition coverage)
  17. 泛函分析 01.03 距离空间-开集和连续映射
  18. 怎样显示计算机联网密码错误,我的笔记本电脑连接wifi时总显示密码不对,但密码是对的!应当怎么弄...
  19. 记录手机app的使用时长
  20. bzoj1189: [HNOI2007]紧急疏散evacuate

热门文章

  1. lcd驱动解析(二)
  2. HP LasterJet 3050驱动安装技巧,面向win7,8,8.1,10
  3. BPM调用有webservice接口的.NET插件
  4. LeetCode 141. Linked List Cycle (链表循环)
  5. 使用Ant 和 Maven打包发布命令行程序(转载)
  6. js中元素(图片)切换和隐藏显示问题
  7. 每天CookBook之Python-037
  8. 通过SQL发送邮件,SQL发送Email(转)
  9. java 一次CPU占用过高问题的排查及解决,java基础面试笔试题
  10. JavaScript 的 switch 条件语句