sourceTree+gerrit管理代码

摘要:
当你第一次接触gerrit时,你会拒绝这种代码管理方法,尤其是那些习惯于使用sourceTree和git进行代码管理的人。有些学生喜欢使用sourceTree,它既漂亮又强大。突然,他们无法推送代码。他们非常慌乱。sh#KeepRunning##由王涛于2018/4/27创作。#版权所有2018牛金凤。保留所有权利。#获取当前分支名称branch=`gitsymbol ref--short qHEAD`#pushreviewgitpushoriginHEAD:refs/for/${branch}2在sourceTree中创建自定义操作。配置如下。参数列是脚本所在的路径。请替换正确的路径。3然后在推送时不要选择右上角的推送,而是选择自定义动作pushgerrit。

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

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

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

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

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

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

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

一、 首次git配置

1 设置Git的用户名和邮箱

 
$git config --global user.name tao.wang

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

2 验证

$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,有些公司会改,注意替换可用端口):

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,我们需要在终端操作,而且不能使用 
git push origin master
 

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

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

git push origin HEAD:refs/for/master
 但是!有些同学就是喜欢用sourceTree,漂亮又强大,突然不能push代码,非常慌!
为了解决这个问题,网上看了很多帖子,其中Stack Overflow上的这篇帖子答案最标准: https://stackoverflow.com/questions/9917645/push-to-gerrit-using-sourcetree
但是,实践证明第一种方案不可用。就是
git config remote.origin.push refs/heads/*:refs/for/*

修改config文件,无效!

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

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

#!/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创建一个自定义操作,配置如下,参数一栏是脚本所在路径,请替换正确路径

sourceTree+gerrit管理代码第1张

3 然后push的时候不要去选择右上角push,而是选择自定义操作push gerrit。
sourceTree+gerrit管理代码第2张
 
 完美解决,现在可以丢开终端了。
 
三、冲突解决
 
因为gerrit默认没有merger权限,所以当冲突之后,就算本地解决了,上传的时候还是会提示错误。怎么办呢?这时候把分支reset到最近一次没有冲突的节点,将自己的改动stash,暂存。然后拉最新代码,这时候不会冲突,因为你的工作区是干净的,然后应用stash,这时候就算冲突,你本地解决一下就可以提交了。冲突解决有很多方式,这是我最常用的,大家需要多练习。
 
我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2qill3xndu040
 

免责声明:文章转载自《sourceTree+gerrit管理代码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇状态机学习layui 二级联动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

我们是如何做好前端工程化和静态资源管理

随着互联网的发展,我们的业务也日益变得更加复杂且多样化起来,前端工程师也不再只是做简单的页面开发这么简单,我们需要面对的十分复杂的系统性问题,例如,业务愈来愈复杂,我们要如何清晰地梳理;团队人员愈来愈多,我们要如何更好地进行团队协作;功能愈来愈多,我们要如何保证页面的性能不至于下降,等等。所有的这些都可以归结为如何提升开发体验和性能问题。 提升开发体验...

Gerrit与Gitlab同步配置replication&其他配置

一、Gerrit与Gitlab同步配置 当配置好gerrit环境后,还需要与现有gitlab库进行同步配置,否则会影响现有开发与打包流程。 1.安装gerrit replication插件 unzip gerrit.war cp WEB-INF/plugins/replication.jar ~/temp/ ssh -p 29418 admin@172.1...

软件的版本控制

无论是个人进行单独编码还是团体开发项目,项目的版本控制都是很重要的。就我所知的版本控制方式有两种。 最简单的版本控制就是保留软件不同版本的数份copy,并且适当编号。许多大型开发案都是使用这种简单技巧。虽然这种方法能用,但是很没效率。一是因为保存的数份copy几乎完全一样,也因为这种方法要高度依靠开发者的自我纪律,而常导致错误。 使用版本控制工具,可以方...

OA系统权限管理设计

任何系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统添加亮点。 l         不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。 l         可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的...

Winform开发框架的重要特性总结

Winform开发框架的重要特性总结 从事Winform开发框架的研究和推广,也做了有几个年头了,从最初的项目雏形到目前各种重要特性的加入完善,是经过了很多项目的总结归纳和升华,有些则是根据客户需要或者应用前景的需要进行的完善,整个Winform开发框架具有很好的通用性和借鉴性,本文从该Winform开发框架进行概括总结,力求把各个重要的特性进行一些详细的...

分布式调度任务管理——Dkron(3)代码结构分析及部署运行

结构:   1.系统说明   2.dkron部署运行   3.Dkron项目结构 一、Dkron   分布式异步调度系统,满足分布式集群部署(基于serf机制)及调度机制(基于raft协议),支持任务cron定时循环执行,失败重试执行次数限制,任务的并发执行,父任务及子任务的链式执行机制。 二、Dkron部署运行 3.1Dkron配置文件 文件存放路径:...