git + gerrit 用于代码 pre-review 以及提交,相对来说比较方便、简单和实用。
For service(gerrit 服务器的安装):
CentOS6下安装gerrit:
1. 先查看是否安装了JDK。
运行java-version查看版本信息 ,如果没有安装 自己安装下。安装这个的过程我就不细说了,一般公司服务器上面都安装了这个。
2. 安装mysql
yuminstall mysql-server
chkconfigmysqld on
servicemysqld start
mysql -uroot
set password for 'root'@'localhost' =password(xxxx);//记住自己设置的密码这是数据库root账号的密码
3. 安装git
yuminstall git
yuminstall git-gui
4. 设置一下数据库
mysql -u root -p
mysql> CREATE DATABASE reviewdb CHARACTERSET utf8;
FLUSH PRIVILEGES;
5. 下载gerrit-2.4.2.war 文件。(这里可以用其他的gerrit版本, 现在的gerrit版本已经很多了,可以考虑用比较新一点的版本)
下载之后拷贝文件到远端服务器
yum install lrzsz
然后可以直接把文件拖到 Xshell中, gerrit 安装文件会默认放在 home 文件夹下。
一般gerrit 的站点都不是安装在home下的。我选择了一个目录 /usr/local/
把gerrit-2.4.2.war 拷贝到/usr/local 下面
6. 安装、配置 gerrit 站点
java -jar gerrit-2.4.2.war init -dreview_site
***Gerrit Code Review 2.4.2
***
*** Git Repositories
***
Location of Git repositories [git]:
*** SQL Database
***
Database server type [MYSQL/?]:
Server hostname [localhost]:
Server port [(MYSQL default)]:
Database name [reviewdb]:
Database username [root]:
Change root's password [y/N]? n
*** User Authentication
***
Authentication method [HTTP/?]:
Get username from custom HTTP header [y/N]?
SSO logout URL :
*** Email Delivery
***
SMTP server hostname [smtp.xxxx.com]:
SMTP server port [25]:
SMTP encryption [NONE/?]:
SMTP username [[email protected]]:
Change [email protected]'s password [y/N]? n
*** Container Process
***
Run as [root]:
Java runtime [/usr/java/jdk1.7.0_45/jre]:
Upgrade/usr/local/review_site/bin/gerrit.war [Y/n]? n
*** SSH Daemon
***
Listen on address [*]:
Listen on port [29418]:
*** HTTP Daemon
***
Behind reverse proxy [y/N]?
Use SSL (https://) [y/N]?
Listen on address [*]:
Listen on port [8080]:
这个配置如果配置错了是不能终止的, 不过可以重复执行。 没有啥影响。完成之后在当前目录下会生成一个 review_site 的文件夹
7 由于使用了http 认证模式(企业里面用的话 建议使用http认证), 所以需要配置apach 反向代理认证机制
yum install httpd
yum install gcc
yum-fastestmirror
yum install nginx
chkconfig nginx on
service nginx start
修改vim /etc/nginx/conf.d/default.conf
添加
location /gerrit/ {
proxy_pass http://127.0.0.1:8082;
proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; auth_basic "Gerrit Code Review";
auth_basic_user_file /etc/nginx/passwd/root.passwd;
}
使用下面语句创建root账户。
htpasswd -C /etc/nginx/passwd/root.passwd root
使用下面语句创建其他账户。
htpasswd /etc/nginx/passwd/root.passwd zhangshasha
如果gerrit 服务器挂掉了,需要重启,
service gerrit restart 或者进入review_site/bin 下面找到 ./gerrit.sh-restart
For User(对于客户端):
1. 安装: 需要安装msysGit 和 TortoiseGit。
安装msysGit
双击安装 有点慢。。。。没找到更好的安装包。 大概需要安装1个小时
安装完之后,可以在安装的对应路径下找到 msysgit 的批处理文件。双击可以直接运行。在shell中可以直接运行git的各种命令,例如 git --help
安装TortoiseGit
TortoiseGit主要是个界面工具。
a、双击安装程序,进入安装界面,如下如所示:
b、两步next进入“Choose SSHClient”选择界面,选择“OpenSSH,Git default SSH Client”,如下图所示:
安装完成。
桌面上右键菜单中会加入TortoiseGit快捷键,如下图所示:
选择“Settings”,进入“Settings-TortoiseGit”界面,选择“General”选项卡,设置本机器的git路径,如下图所示:
同时选择“Network”选项卡,设置SSH路径。SSH默认在安装Git时就安装了,在如下图所示的路径中。如下图所示:
2 同步代码
让管理员给你添加gerrit用户,并告知 网页端的默认登录密码。
a)在浏览器 实用 用户名和密码 登录 review.test.com。在Settings->ContactInformation 里面修改自己的名字并且注册自己的邮箱。
b)添加SSH。打开msys.bat 。在命令窗口执行 ssh-keygen -C [email protected]. 选择默认的存储路径, 填写ssh 密码(记住这个密码)。 查看 生成的 id_rsa.pub文件。复制里面的内容,添加到 review.test.com 的 SSH Public Keys里面。
c)在网站上 点击projects->List 选择要同步的项目。 拷贝它的 ssh 路径。(git clonessh://[email protected]:29418/AndroidSrc)。然后在 命令行里面 执行, 可以把代码拷贝到当前路径下。
3. 常用的git 命令
1. git status
2. git add 文件路径
3. git commit -s
4. git push orgin HEAD:refs/for/master
5. git log / git log --author=xxxx
6. git branch -r
7. git diff
8. git show xxxxxxx
9. git revert xxxxxxx
10. git reset --hard HEAD
11. git rebase xxxxxx
12. git checkout xxxxxxx
13. git fetch --all
14. git reset --hard origin/master
无论是在图形化界面还是命令行里面操作,最后都要执行
git push origin HEAD:refs/for/master
第一次执行会有问题, 提示缺少change-ID ,按照提示执行一遍命令之后就ok了。
4. 进行代码review
gitpush 之后不会直接提交到 master分支,需要先review +2 之后才能提交。
5. git submodule 的使用。
对于一些需要依赖其他项目的项目, 我们可以使用submodule把他们一起拉下来, 这样当依赖库有更新的时候我们也可以在本地直接同步依赖库的代码。
对于项目管理员:需要添加这些依赖关系:
gitsubmodule add 依赖库的地址 要拷贝到的相对目录
gitcommit -s
gitpush 提交修改。
对于普通的开发人员:
git clone -b master --recursive http://192.168.100.82:8080/gerrit/xx项目
git submodule foreach git checkout master//切换到master分支
git submodule update