一 简介
1. 简介
Android 使用 Git 作为代码管理工具,开发了 Gerrit 进行代码审核以便更好的对代码进行集中式管理,还开发了 Repo 命令行工具,对 Git 部分命令封装,将百多个 Git 库有效的进行组织。
2. 清单库文件介绍
一个清单库可以包含多个清单文件和多个分支,每个清单文件和分支都有对应的版本。清单文件以xml格式组织的。举个例子:
1. remote元素,定义了名为korg的远程版本库,其库的基址为git://172.16.1.31/
2. default元素,设置各个项目默认远程版本库为korg,默认的的分支为gingerbread-exdroid-stable。当然各个项目(project元素)还可以定义自己的remote和revision覆盖默认的配置
3. project元素,用于定义一个项目,path属性表示在工作区克隆的位置,name属性表示该项目的远程版本库的相对路径
4. project元素的子元素copyfile,定义了项目克隆后的一个附件动作,从src拷贝文件到dest
3. 下载repo代码
$mkdir android2.3.4
$cd android2.3.4
$git clone git://172.16.1.31/repo.git
于是在android目录下便有repo文件夹,里面包含了repo的源代码,里面有个repo脚本,用它来执行repo指令。 在本地开发的用户需要下载repo代码,在172.16.1.7服务器上开发的用户则不用下载repo代码,因为已经把repo脚本添加到了环境变量,执行repo init 就会附加的下载repo代码。
4. 以上源文档.
二 使用
1. 配置
- 首先进入.ssh目录,使用ssh-keygen命令(ssh-keygen -t rsa -C mail.com)生成SSH KEY
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxx/.ssh/id_rsa): test(自己命名)
github already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in github.
Your public key has been saved in github.pub.
The key fingerprint is:
SHA256:xrCGmm3WcInaYDZeUI5zVsGmIUMXp6JjQ6gwCHLbp3c xxxxxx@gmail.com
The key's randomart image is:
+---[RSA 2048]----+
|o.o +o+. |
|=.oB.+o |
|=.*o*+o |
|+o *.= = |
|+o= * * E |
|.=.X * o |
| = = . |
| o |
| |
+----[SHA256]-----+
- ls可以看到生成一对公私钥 test test.pub
- 然后创建~/ssh/config 进行配置
- 在gerrit上add key
- 使用 ssh gerrit.xxx.com 查看是否可以访问成功
2. 配置
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
repo init -u https://android.googlesource.com/platform/manifest
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
repo sync
以上为主要操作,详情查看官方文档 here.
3. 流程
- git add, git commit; 第一次提交
- 修改后提交,git commit –amend
- git push 远程地址 本地分支:refs/for/远程分支
特殊操作记录,下载新的工程
repo init -u ssh://gerrit/ProjectName -b master
repo sync -xx
repo start master —-all
遇到的问题总结
1 error: repo is not installed. Use "repo init" to install it here.
touch .bash_profile
vi .bash_profile
source .bash_profile
修改profile出错,又重新运行了一遍 repo init
2 repo sync error 流程
当我自己git clone XXX后,会提示 Your branch is up-to-date with ‘origin/master’. 然后vi .git/config origin 修改为 gerrit后可以正常使用
但该Project是在repo中的,之后我repo sync就报错:
error.GitError: --force-sync not enabled; cannot overwrite a local work tree. If you're comfortable with the possibility of losing the work tree's git metadata, use `repo sync --force-sync XXX` to proceed.
错误。GitError:——force sync没有启用,不能覆盖本地工作树。的可能性,如果你习惯失去工作树的git的元数据,使用“回购同步——force sync XXX”继续。
此时删除XXX project, repo sync 就正确了。