sourceTree+gerrit管理代码

2018-05-17 15:04:13 浏览数 (1)

第一次接触gerrit,会对这种代码管理方式非常排斥,尤其是习惯了用sourceTree配合git进行代码管理的同学。不爽归不爽,代码还得写,我们的目标是让开发过程爽起来。

关于gerrit的知识,移步这里学习:【Gerrit】Gerrit工作流程及使用手册

不熟悉的同学看完上面文章再继续学习。

我们遇到的问题主要有以下几个:

1 第一次拉取代码之前,需要配置本地git环境

1 sourceTree的某些功能不能使用了,让人不爽。比如无法直接push

2 提交代码过程中,如果冲突,gerrit默认不给merger权限。怎么处理?

一、 首次git配置

1 设置Git的用户名和邮箱

代码语言:javascript复制
$git config --global user.name tao.wang

 
$git config --global user.email tao.wang@xxxxx.com 

2 验证

代码语言:javascript复制
$git config --global user.name 
 // tao.wang


$git config --global user.email tao.wang@xxxxx.com
// tao.wang@xxxxx.com

3 创建SSH Key公私钥,并上传gerrit。这个步骤大家很熟悉了。不知道的google。

4 配置本地gerrit

在之前创建的 .ssh文件夹中创建config文件(或直接拷贝配置好的config文件), config文件内容(注意user名称换成自己的的账户名,port端口默认29418,有些公司会改,注意替换可用端口):

代码语言:javascript复制
host gitserver hostname 172.16.99.xx 
user tao.wang
port 29418  

host gerrit 
hostname 172.16.99.xx 
user tao.wang
port 29418
KexAlgorithms  diffie-hellman-group1-sha1 

二、sourceTree配合gerrit

主要问题在于无法直接在sourceTree左上角push,我们需要在终端操作,而且不能使用 

代码语言:javascript复制
git push origin master

这是为什么呢?看过【Gerrit】Gerrit工作流程及使用手册这篇文章的就会知道,gerrit增加了codereview的流程。所以会依赖一个临时分支,我们提交代码需要提交到该临时分支。

所以,使用以下命令拉取代码:

代码语言:javascript复制
git push origin HEAD:refs/for/master

 但是!有些同学就是喜欢用sourceTree,漂亮又强大,突然不能push代码,非常慌!

为了解决这个问题,网上看了很多帖子,其中Stack Overflow上的这篇帖子答案最标准: https://stackoverflow.com/questions/9917645/push-to-gerrit-using-sourcetree。

但是,实践证明第一种方案不可用。就是

代码语言:javascript复制
git config remote.origin.push refs/heads/*:refs/for/*

修改config文件,无效!

第二种是创建一个自定义操作,执行脚本,脚本去正确push。事实证明好用!

1 使用xcode创建一个shell脚本,内容如下

代码语言:javascript复制
#!/bin/sh

#  push.sh
#  KeepRunning
#
#  Created by 王涛 on 2018/4/27.
#  Copyright © 2018年 niujinfeng. All rights reserved.

# 获取当前分支名
branch=`git symbolic-ref --short -q HEAD`
# push review
git push origin HEAD:refs/for/${branch}

2 在sourceTree创建一个自定义操作,配置如下,参数一栏是脚本所在路径,请替换正确路径

3 然后push的时候不要去选择右上角push,而是选择自定义操作push gerrit。

 完美解决,现在可以丢开终端了。

三、冲突解决

因为gerrit默认没有merger权限,所以当冲突之后,就算本地解决了,上传的时候还是会提示错误。怎么办呢?这时候把分支reset到最近一次没有冲突的节点,将自己的改动stash,暂存。然后拉最新代码,这时候不会冲突,因为你的工作区是干净的,然后应用stash,这时候就算冲突,你本地解决一下就可以提交了。冲突解决有很多方式,这是我最常用的,大家需要多练习。

0 人点赞