谷歌的Android源码是基于Git+Repo管理的,官方推荐的代码管理也是git+gerrit+repo。谷歌自己都在用的东西,各种优点,各种强大就不用说了,你懂的。
安装git
1.建个git账户。作服务器用,最好建个git账户。指令:sudo adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /home/git git。篇幅有限,简单指令就不解释了,请自行谷歌百度,我也是这么干的。
2.安装 ssh client 和 ssh server (有可能ubuntu默认已经安装,重新敲下不会损失什么的)
sudo apt-get install openssh-client openssh-server
3.安装git 客户端
sudo apt-get install git-core git-gui gitk
4. 生成ssh账号的密钥
ssh-keygen -t rsa
然后切到git用户下,执行下面步骤
5. 配下环境变量
echo "PATH=$HOME/bin:$PATH" > ~/.bashrc
不行就下面这个
export PATH=/home/git/bin:$PATH
6.安装gitolite server
在/home/git下执行
git clone git://github.com/sitaramc/gitolite #从网站上获取gitolite的代码,放在了/home/git下,是安装文件
./gitolite/install -ln #Gitolite系统安装,安装到/home/git/bin,要在git用户下mkdir bin,否则这步报错
gitolite setup -pk /tmp/git.pub #生成repository,仓库。其中git.pub是由第四步生成的id_rsa.pub改名的,可随意改
最后使用git config --global user.name 和 git config --global user.email 配下用户名和邮箱,至此git安装完毕
安装配置gerrit
1. 安装java。网上很多,挤客学院也有,很简单
2. 安装git。前面已经说过
3. 创建专用的用户(gerrit2)来安装gerrit
sudo adduser gerrit2
sudo su gerrit2
4. 安装gerrit,选择http认证(gerrit2用户)
java -jar ./gerrit-2.9.1.war init -d ~/gerrit_site_http
安装过程中,Authentication method [OPENID/?]:输入http,另外Behind reverse proxy [y/N]?选y 反向代理,其他的默认即可
5. 配置gerrit.config,可参考下面
[gerrit]
basePath = git
canonicalWebUrl = http://192.168.1.48:8081/
[database]
type = H2
database = db/ReviewDB
[auth]
type = HTTP
[sendemail]
smtpServer = localhost
[container]
user = gerrit2
javaHome = /usr/lib/jvm/java-6-oracle/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://192.168.1.48:8081/
[cache]
directory = cache
6. 安装配置apache2
sudo apt-get install apache2
反向代理可参考下面
/etc/apache2/httpd.conf
<VirtualHost *:80>
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location /login/>
AuthType Basic
AuthName "Gerrit Code Review"
AuthBasicProvider file
AuthUserFile /home/gerrit2/gerrit_site_http1/etc/passwords
Require valid-user
</Location>
ProxyPass / http://192.168.1.48:8081/
</VirtualHost>
7. 设置第一个gerrit用户(管理员)的帐号和密码
进入/home/gerrit2/review_site/etc目录下
touch passwords
htpasswd passwords admin
这里的admin就是以后用来登录gerrit的用户名。以后要为gerirt增加用户,也需要通过htpasswd命令来添加。
用htpasswd创建的用户时,并没有往gerrit中添加账号,只有当该用户通过web登陆gerrit服务器时,该账号才会被添加进gerrit数据库中。
8. 重启电脑然后重启服务
sudo /etc/init.d/apache2 restart
su gerrit2
cd /home/gerrit2/gerrit_site
./bin/gerrit.sh stop
./bin/gerrit.sh start
9. 打开浏览器,输入192.168.1.48即可登录
10. 验证下 ssh -p 29418 -i ~/.ssh/admin 192.168.1.48 -l admin
11. 设置/修改邮箱 ssh ha gerrit set-account --add-email admin@cncgroup.cn admin
一个邮箱只能一个用户使用,否则会报错。
12.建库:ssh -p 29418 -i ~/.ssh/admin 192.168.1.48 -l admin gerrit create-project --name
ssh ha gerrit create-project --name test --empty-commit
13.然后是分组/审查的设置,这个内容比较多,可参考帮助文档,设置能达到目标即可
以上就是gerrit的整个过程,你会发现gerrit目录结构中有git仓库,即gerrit把git集成进去了,git的操作要经过gerrit的审查。
repo安装
如果能***的话,很简单,只需从官网下把那个repo脚本下下来,放/bin/下, chmod a+x repo即可。每次用它拉版本时,它会从谷歌服务器下载repo仓库(一系列脚本),之后直接用即可。可惜不行。
可采用的办法是
1. 通过其他途径下下repo.git仓库(使用tuna的镜像源进行更新 export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'加到~/.bashrc
里),传到本地服务器上(gerrit的git库review_site/git下)。
2. 然后修改/bin/repo脚本 os.system("git clone ssh://192.168.1.48:29418/repo %s"%dst) 先执行了下git clone把repo.git这个库从本地服务器clone下来
3. 在gerrit的git库下创建manifest.git库,其中放各个.xml文件,相关可参考
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="repo-server"
fetch="ssh://192.168.1.48:29418"
review="http://192.168.1.48"/>
<default revision="develop"
remote="repo-server"
sync-j="4" />
<project path="alps/packages" name="alps/packages" />
</manifest>
至此,构建git+gerrit+repo的Android代码服务器完成,使用中还有很多细节/技巧,后续大家一起交流。