Android中管理代码基本工作流程

2022-05-10 20:57:56 浏览数 (2)

原文地址 译者:远方的自由 转载请注明出处: http://blog.csdn.net/z2066411585

描述

管理Android代码需要使用Git(一个开源的版本控制系统)和Repo(Git上运行的Google构建的存储库管理工具)

Git

Git用在处理分布多个存储库项目中,Android使用Git进行本地操作,如本地分支,提交,差异和编辑,安装Andriod项目的挑战之一是如何最好的支持外部社区,从爱好者社区到大型OEM构建大众市场消费者设备. 我们希望组件可以被替换 并且我们希望组件在Android之外拥有更多的可能,我们首先选择了一个分布式控制系统,然后把它定位到Git. 有关Git更多的细节,参考Git Documentation

Repo

Repo会统一管理Git存储库,执行上传到 Gerrit revision control system,并自动化Android开发工作流程的部分内容. Repo并不意味要取代Git,只是为了更容易在Android上下文中使用Git,Repo命令是一个可执行的脚本,可以放在路径的任何地方,在使用Android源文件时,你可以使用Repo进行跨网络操作. 例如,使用单个Repo命令,你可以将多个存储库中的文件下载到本地工作目录.在大多数情况,你可以使用Git而不是Repo或混合Repo和Git来形成复杂的命令,然而将Repo用于基本的跨网络操作将使你的工作更加简单,有关Repo更多的细节,参见Repo Command Reference.

其他工具

其他工具包含Gerrit,一个基于Web的代码审查系统,用于使用Git项目, Gerrit允许授权用户提交修改,鼓励更集中的使用Git,如果通过代码审查,则会自动合并.另外,Gerrit通过浏览器中并排显示更改并内嵌评论,使审阅变得更加简单

工作流程

Android 开发涉及以下基本流程:

图1: 基本Android工作流程

  1. 使用repo start 开始一个新的主分支
  2. 编辑文件
  3. 使用git add来把更改提交到暂存区
  4. 使用git commit 提交更改
  5. 使用repo upload 将更改上传到审核服务器

常见命令

在Android 代码库中使用Git和Repo包括一下常用命令

命令

描述

repo init

初始化一个新的客户端

repo sync

将客户端同步到存储库

repo start

开始一个新的分支

repo status

显示当前分支的状态

repo upload

将更改上传到审阅服务器

git add

文件添加到暂存区

git commit

提交文件到本地仓库

git branch

显示当前分支

git branch [branch]

创建一个新的分支

git checkout [branch]

将HEAD切换到指定分支

git merge [branch]

合并指定分支到当前分支

git diff

显示未跟踪更改的差异

git diff –cached

显示分阶段更改的差异

git log

显示当前分支的历史记录

git log m/[codeline]..

显示未被推送的提交

有关使用Repo下载源代码信息,参见DownloadingTheSource和https://source.android.com/setup/using-repo.html

同步客户端

同步所有可用项目的文件

repo sync

同步所选项目文件

repo sync PROJECT0 PROJECT1 … PROJECTN

创建主分支

每当你开始更改时,例如在开始处理错误或新功能时,在本地工作环境中创建主分支,主分支不是原始文件的副本,它是一个指向特定提交的指针,这使得创建本地分支并在它们切换是一种轻量级操作.通过使用分支,你可以将工作与其他方面分开,有关使用主分支的文章,参见 Separating topic branches

要使用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同步重置本地主分支,如果运行repo sync后,git分支显示*,请再次运行git checkout

添加文件

默认情况下,Git通知但不跟踪你在项目中所做的更改,为了告诉Git保存你的改变,你必须标记或分级这些改变以包含在提交中

阶段的提交:

git add

该命令接受项目目录中文件或目录的参数,尽管git add 不会简单地添加文件到git仓库,它可以用来对文件进行修改和删除

查看客户端状态

列出文件的状态:

repo status

查看未提交的编辑(没有标记为提交的本地编辑):

repo diff

查看提交的修改(找到被标记为提交的编辑),确保你在项目目录下,然后用缓存的参数运行git diff

cd ~/WORKING_DIRECTORY/PROJECT git diff –cached

图2:未提交和已提交的编辑

提交更改

提交是Git中修订控制的基本单元,由整个项目的目录结构和文件内容组成,在Git中创建一个提交:

git commit

当提示你提交消息时,请为提交给AOSP的更改提供简短描述,如果不添加提交描述,则提交终止:

上传更改到Gerrit

更新到最新版本,然后上传更改:

repo sync repo upload

此命令返回你已提交的更改列表,并提示你选择要上传到审阅服务器的分支,如果只有一个分支,你会看到一个简单的y/n提示

解决同步冲突

如果repo sync 命令返回同步冲突:

1.查看未合并的文件,(status code = U) 2.根据需要编辑冲突区域 3.切换到相关的项目目录,添加并提交受影响的文件,然后重新设置更改:

代码语言:javascript复制
git add .
git commit
git rebase --continue

4.rebase完成后,再次启动整个同步:

repo sync PROJECT0 PROJECT1 … PROJECTN

清理客户端

合并更改到Gerrit后,更新你的本地工作目录,然后使用repo prune安全删除旧的主分支

repo sync repo prune

删除客户端

由于所有信息都储存在客户端中,因此只需从文件系统中删除目录即可

rm -rf WORKING_DIRECTORY

永久删除客户端会删除你未上传用于审核的所有更改

0 人点赞