Gerrit的日常

栏目: 编程工具 · 发布时间: 6年前

内容简介:Gerrit实际上一个Git服务器,它为在其服务器上托管的Git仓库提供一系列权限控制,以及一个用来做Code Review的Web前台页面。当然,其主要功能就是用来做Code Review.1.使用gitbash查看是否已经有了ssh密钥:cd ~/.ssh2.生成ssh密钥:

Gerrit实际上一个Git服务器,它为在其服务器上托管的Git仓库提供一系列权限控制,以及一个用来做Code Review的Web前台页面。当然,其主要功能就是用来做Code Review.

如何配置Gerrit使用的SSH

1.使用gitbash查看是否已经有了ssh密钥:cd ~/.ssh

2.生成ssh密钥:

$ ssh-keygen -t rsa -C “你想设置的用户名”
复制代码

3.生成密钥后要求设置密码,可按回车键跳过

4.登录你的Gerrit网站,将生成的.ssh文件夹下的公钥id_rsa.pub中的内容粘贴到setting--SSH Public Keys中即可

Gerrit的日常

5.你可能还需要给ssh添加一个无格式的配置文件config

Gerrit的日常

config文件中具体需要写入什么配置请询问你们搭建gerrit服务的同事。完成后你就可以正常使用Gerrit了.

Gerrit的日常使用

使用git命令拉取代码,git命令从gerrit项目中获取,获取clone地址时选中“clone with commit-msg hook”和“SSH”。打开gitbash进行代码下载。

Gerrit的日常

下载完成后注意检查commit-msg文件是否下载成功,如果没下载到,请自行前往gerrit下载,并放到项目目录下,如下图

Gerrit的日常

commit-msg文件是用于为每次commit自动生成唯一的changeId。

Push命令:git push origin Head:refs/for/branch 这里的branch是指你想要提交到的分支名

Gerrit使用中可能遇到的问题

  • gerrit通过给每个独立的commit加上一个唯一的changId来保证有序的代码提交和review,多次commit携带相同的changid视为对同一次commit的修改,如果commit没有携带changid的话则无法push成功,所以当push失败的时候第一件事应该是检查当前的commit是否都带有changid。如果仅最后一次commit没有changid,可使用git commit --amend,此命令的作用就是将最新一次commit指向上一次带有changid的commit,如果含多条commit都没有changid的话,可以checkout这些commit然后逐条添加changid,或者rebase到最后一次有效的commit然后重新编辑提交.

  • 由于某次commit携带的用户信息与gerrit网站上的配置不相同而导致push失败时,使用git命令检查或更换本地账号:

    查看用户名和邮箱地址:
      
      $ git config user.name
      
      $ git config user.email
      
      修改用户名和邮箱地址
      
      $  git config --global user.name  "xxxx"
      
      S  git config --global user.email  "xxxx"
    复制代码

    当然,你也可以直接修改git的配置文件,打开全局的.gitconfig文件的命令为:vi ~/.gitconfig.

  • 听说stackoverflow上"如何在vim下保存并退出"这个问题已经有一百万+的访问量了,赶紧记录下操作:esc退出编辑模式,然后冒号:wq即可.

以下为新增转载内容:

Git撤销commit的操作命令: git reset --hard HEAD^

一、新建三个文件,demo1,demo2,demo3

Gerrit的日常

二、git add 命令提交到暂存区,git reset HEAD demo1就是把提交到暂存区里的文件撤销。

Gerrit的日常

上图中,执行git reset HEAD demo1就会把demo1从暂存区中撤销,现在是untracked.

三、git commit 提交本地仓库

Gerrit的日常

上图中显示,git commit把demo2,demo3提交到本地仓库中。

四、现在想撤销之前的commit,可以用git reset --hard HEAD^命令

Gerrit的日常

第三步中,先commit demo2,再commit demo3,因此现在的HEAD即是demo3的commit值。

(HEAD是指向最新的提交,上一次提交是HEAD^,上上次是HEAD^^,也可以写成HEAD~2 ,依次类推)

因此git reset --hard HEAD 就是把最新提交的demo3撤销掉,撤销是非常彻底的,本地文件也会删除。

有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge。甚至一些很小的操作,例如删除一个分支,我都担心数据丢失。

不久之前,我在做一些大动作(rebasing)之前,我总是备份整个版本库,以防万一。直到最近我才发现git的历史记录是不可修改的,也就是说你不能更改任何已经发生的事情。你做的任何操作都只是在原来的操作上修改。也就是说,即使你删除了一个分支,修改了一个提交,或者强制重置,你仍然可以回滚这些操作。

让我们来看一些例子:

$ git init
$ touch foo.txt
$ git add foo.txt
$ git commit -m "initial commit"

$ echo 'new data' >> foo.txt
$ git commit -a -m "more stuff added to foo"
复制代码

你现在看git的历史记录,你可以看到两次提交:

$ git log
* 98abc5a (HEAD, master) more stuff added to foo
* b7057a9 initial commit
复制代码

现在让我们来重置回第一次提交的状态:

$ git reset --hard b7057a9
$ git log
* b7057a9 (HEAD, master) initial commit
复制代码

这看起来我们是丢掉了我们第二次的提交,没有办法找回来了。但是reflog就是用来解决这个问题的。简单的说,它会记录所有HEAD的历史,也就是说当你做 reset,checkout等操作的时候,这些操作会被记录在reflog中。

$ git reflog
b7057a9 HEAD@{0}: reset: moving to b7057a9
98abc5a HEAD@{1}: commit: more stuff added to foo
b7057a9 HEAD@{2}: commit (initial): initial commit
复制代码

所以,我们要找回我们第二commit,只需要做如下操作:

$ git reset --hard 98abc5a
复制代码

再来看一下 git 记录:

$ git log
* 98abc5a (HEAD, master) more stuff added to foo
* b7057a9 initial commit
复制代码

所以,如果你因为reset等操作丢失一个提交的时候,你总是可以把它找回来,除非你的操作已经被git当做垃圾处理掉了,一般是30天以后。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Paradigms of Artificial Intelligence Programming

Paradigms of Artificial Intelligence Programming

Peter Norvig / Morgan Kaufmann / 1991-10-01 / USD 77.95

Paradigms of AI Programming is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-......一起来看看 《Paradigms of Artificial Intelligence Programming》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具