repo使用

2016/07/16

一 简介

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. 配置

  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]-----+
  1. ls可以看到生成一对公私钥 test test.pub
  2. 然后创建~/ssh/config 进行配置
  3. 在gerrit上add key
  4. 使用 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. 流程

  1. git add, git commit; 第一次提交
  2. 修改后提交,git commit –amend
  3. 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 就正确了。

文内导航