Gerrit的日常

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

内容简介: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天以后。


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

查看所有标签

猜你喜欢:

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

Java解惑

Java解惑

布洛赫、加夫特 / 陈昊鹏 / 人民邮电出版社 / 2006-1 / 39.00元

本书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向读者展示了如何一劳永逸地避免底层的陷阱与缺陷。 本书趣味十足、寓教于乐,适合于具备Java知识的学习者和有编程经验的Java程序员。一起来看看 《Java解惑》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具