【gerrit中】Git相关整理

小白入门

——如何从0开始,提交自己的代码到远程

1. 先确保自己下好了git:

检查是否安装git的命令:
git version

安装git命令
sudo apt-get install git

偷偷补充一下mac上如何下载git:
1、通过homebrew安装Git
·首先,若未安装homebrew,需安装homebrew(一般mac会自带的)
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
· 命令行安装git
brew install git

2、通过Xcode安装
直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

Windows上如何下载git:
似乎直接在官网上下下来安装包就OK了

2. 配置git用户、邮箱:(后续连接远程和提交代码都要用,一定记得配置为自己信息)

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

**3. 获取连接远程许可: **

不是谁都可以随便往我们的代码仓库提交东西

ssh命令生成密钥(钥匙–许可,用于告知仓库自己拥有打开的权限):
ssh-keygen -t rsa -C “email@example.com”

​ 注意执行命令后需要进行3次或4次确认(建议一路回车):

  • 确认秘钥的保存路径(如果不需要改路径则直接回车);
  • 如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);
  • 创建密码(如果不需要密码则直接回车);
  • 确认密码;

创建好了密钥,接下来就是找到它:
cat ~/.ssh/id_rsa.pub

然后终端中会显示一小段乱码,将其复制下来 (**注意一定全部复制,从我们命令的下面一行起,不要有任何遗漏,遗漏会导致连接无法成功 **),

接着到gerrit-settings中的ssh-public key中新建一个key,讲刚刚复制的密钥内容粘贴进去( 其它的代码管理平台也是一样的套路 )

4. 获取远程项目

很好,走到这里我们已经做好了全部的准备工作,可以正式开始加入大队伍,拉取代码、提交代码了。

首先,我们先将远程大佬们建好的我们要加入的项目直接克隆到本地一份,

这里依然要注意一下,git执行完克隆命令会自动将文件放置在当前目录下的。

所以一定一定先选好位置,确保自己的项目克隆到你想要的位置,不然克隆完发现放到了自己不想放的地方或者甚至找不到就尴尬了,

这个克隆命令一般平台会自动生成,我们找到对应的地方去复制就好,是类似下面的命令:

git clone ssh://XXXXXX.git@xxxxx.com/projetName

在gerrit中呢,就到Project-list中找项目,点进去就直接可以看到啦

(这里介绍的是小白同志参与项目建设所需的过程,所以是拉取项目代码,而非新建项目)

这里可能会遇到这样的问题:

Unable to negotiate with xx.xx.x.xxx port xxxx:
no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

这是Git server和client使用的ssh key解析算法不一致导致的问题,client默认使用新的key exchange method,而server只提供 diffie-hellman-group1-sha1 方法,因此无法正常建立链接。

解决方法:

在.ssh文件夹( 一般在当前用户的家目录~下)中编辑config文件
( 如果没有、直接新建:  vim config ),
在config文件中保存以下内容:(注意*号与Host间有空格)

Host *
KexAlgorithms +diffie-hellman-group1-sha1

5. 提交代码

本地修改/增加完成后,提交文件:

  • 创建并切换到新分支( 基于master ) :

    `$ git checkout -b 功能分支名			//创建并切换到新分支
    
    //-b 是新建分支并切换( 一般不用 )、不加是直接切,add-demo是分支名	】
    

    **branch有这么三条命令,都是我们很常用的: **

    (这里有一篇专门的git教程,解释branch的原理解释得很透彻,推荐一下:

    https://git-scm.com/book/zh/v2/Git-分支-分支简介

    真的是非常好,有时间可以全部看一下,对git会有进一步的理解)

    下面先粗略地介绍这三条命令:

    `$ git checkout 功能分支名		
    //切换到已有的某个分支
    (我自己基本都直接用vscode自带的branch管理器,直接点,好找好操作, vscode——值得拥有,所以一般命令行用上面的 `checkcout -b` 多一点)
    
    `$ git branch		
    //查看本地现有的所有分支(现在所在的分支会被着重标出)
    
    `$ git branch -d 	功能分支名		
    //删除不再用的分支
    (这个分支中有内容的话,是删不掉的,需要用 `-D`才好使,
    但是请一定确认不再使用再删除,删除的分支是可以恢复,但还是有点麻烦的)
    
  • 确认文件状态:

    `$ git status`
    //显示暂存区及还未暂存的改变(已存为绿色,未存为红色,commit之后这里就啥也没有啦)
    
  • 将修改后的内容保存到暂存区:

    `$ git add .
    //这表示将所有文件中的改变都暂存,一般来说这就够用了
    
  • 将所有暂存区文件提交到本地仓库(commit前一般要再add一下,确保将所有的改变都提交了):

    这里注意commit请保持只有一个commit,负责后面会出现提交失败的问题

    (git不知道你要提交哪个commit中的修改)

    `$ git commit 
    //新建一个commit,在我们的gerrit中一个patch中只有第一次提交会用这个命令,之后请一定都用下面命令:
    
    `$ git commit —amend 	
    //直接修改上一次的提交(不会生成新的commit)
    
  • 提交前,最好切换到master分支、更新一下项目:

    ( 这个操作可以不用每次都进行,但是最好隔一小段时间就来一次,确保自己本地的分支与整个项目的进度保持一致 )

    `$ git checkout master	//切换到master分支
    
    `$ git pull origin master	//拉取远程代码、更新本地分支内容
    
    切换到功能分支,并应用master分支的更改:
    `$ git checkout功能分支名 	//切换到自己的patch分支
    
    `$ git rebase master()	//应用在master分支远程拉取到的信息更新
    
    此时会出现合并冲突的问题,因为你本地做了一定的改动,会和pull下来的信息不一致,需要手动解决一下
    
    然后需要终止rebase操作,不然在rebase状态(git 会切到一个暂时存在的分支,专门用于解决冲突,所以这时你也并不在自己的分支里)是不能够进行提交操作的,所以要进行以下操作:
    
  • 结束rebase状态:

    `$ git rebase —continue
    //合并了冲突(将你解决后的变化归入这个commit)
    
  • 正式向远程提交:

    `$ git review
    

    中途遇到问题需要切换其它分支或其它什么操作时,可以对现在的本地工作进度进行存档:

    stash命令用得好可以解决很多开发过程中的问题,这个单独会开一个附加文件来讲

    `$ git stash		//当前工作现场存档
    
    `$ git stash list		//查看stash list
    
    `$ git stash pop   	//工作现场恢复(同时会删除stash list中的第一条)
    

后续附加内容:

git中还有不少点很值得更深入的了解:

  • commit
  • rebase
  • stash
  • reset

这些会在后续分不同的小文章进行介绍

一点友善的提示:

这里还要提到一点,git很多时候非常的友好,大部分出错的情况下它都会给出一些切实可行的方案,注意留意提示信息哦

以及,不要记着用git提供给我们的提示中的命令,最好先查一下资料,避免产生一些不可挽回的损失

上一篇:gerrit commandline 修改label


下一篇:gerrit常用命令笔记