• sourceTree+gerrit管理代码


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

    3 然后push的时候不要去选择右上角push,而是选择自定义操作push gerrit。
     
     完美解决,现在可以丢开终端了。
     
    三、冲突解决
     
    因为gerrit默认没有merger权限,所以当冲突之后,就算本地解决了,上传的时候还是会提示错误。怎么办呢?这时候把分支reset到最近一次没有冲突的节点,将自己的改动stash,暂存。然后拉最新代码,这时候不会冲突,因为你的工作区是干净的,然后应用stash,这时候就算冲突,你本地解决一下就可以提交了。冲突解决有很多方式,这是我最常用的,大家需要多练习。
     
    我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2qill3xndu040
     
  • 相关阅读:
    类和接口对比
    concurrenthasmap
    java中的三大注解
    基本数据类型,注意首字母
    常见ascii码记忆
    Java软件工程师面试题:Java运行时异常与一般异常有什么不一样?
    &和&&的共同点和区别、Java字符含义和Java创建对象的几种方式
    Java面试题中常考的容易混淆的知识点区别
    Java面试题整理:这些Java程序员面试中经常遇见的题目,必须掌握才能有好结果
    Spring Cloud 微服务架构的五脏六腑,统统晒一晒!
  • 原文地址:https://www.cnblogs.com/6duxz/p/8967835.html
Copyright © 2020-2023  润新知